2012-11-12 96 views
0

我有一个应用程序组成的多个活动。有多个项目可以购买。每项活动中显示的内容可能因所购买的内容而异。我有一个BillingReceiverpurchaseStateChanged()方法。我在purchaseStateChanged()里需要做的是说,无论哪个活动正在运行,请使无效/刷新?屏幕。有没有这样做的标准方式?刷新屏幕从BillingReceiver内

编辑:看着西蒙的评论,只是更容易回答,让我们说,BillingReceiver接收到purchaseStateChanged()的调用当两个活动一个可以运行,ActivityA或ActivtyB。这些活动都含有方法void redraw_everything()它们都声明为:

void redraw_everything() 
{ 
    getWindow().getDecorView().invalidate(); 
} 

我不知道设立一个回调的语法,但我想答案可能看起来是这样的:

在两者的onCreate活动应该说是这样的:

BillingReceiver.setupcallback(redraw_everything()); // ?? 

,并在的onDestroy()方法中有这样的事:

BillingReceiver.setupcallback(null); // ?? 

然后在BillingReceiver做的方法是这样的:

??? stored_method_to_call; 

void setupcallback(???? method_to_call) 
{ 
    stored_method_to_call = method_to_call; 
} 

然后里面purchaseStateChanged()有一些这样的代码:

if (stored_method_to_call != null) // ?? not sure about syntax 
{ 
    stored_method_to_call(); // ?? not sure about syntax 
} 
+0

定义一个接口,并使用您的BillingReceiver对您的活动的回调。该活动注册onPurchaseStateChangedListener()并根据需要进行响应。 – Simon

+0

@Simon:谢谢,看起来它可能是正确的,但我不够舒服,回调让它轻松运行。所以我在问题中增加了一些额外的东西,以便更容易回答 - 也许您可以将您的评论作为答案,以便将其标记为正确。 – Mick

+0

完成,顶部有一些糖。 – Simon

回答

1

定义一个接口,并使用一个回调,让活动知道,购买已经完成。

public Interface PurchaseStateChangedListener { 
    void onPurchaseStateChanged(); 
} 

在您的结算接收器。

ArrayList<PurchaseStateChangedListener > listeners = new ArrayList<PurchaseStateChangedListener >(); 

... 

public void setPurchaseStateChangedListener(PurchaseStateChangedListener listener){ 
    listeners.add(listener); 
} 

在您的购买状态变化的方法:

for (PurchaseStateChangedListener listener:listeners){ 
    listener.onPurchaseStateChanged(); 
} 

在你的活动:

public class Test extends Activity implements PurchaseStateChangedListener { 

... 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    ... 

    billingReceiver.setPurchaseStateChangedListener(this); 
    ... 
} 

public void onPurchaseStateChanged(){ 
    // do whatever you need to do 
} 

您可以通过添加removePurchaseStateChangedListener和检查,你不加改进计费的接收机类setPurchaseStateChangedListener中两次相同的侦听器。

+0

谢谢。这一切都看起来很有希望,我已经全部编译(需要添加一些静态)。一旦我已经明确地测试了它的正常工作,我会尽快给它打个招呼。 – Mick