我有一个由多个活动组成的应用程序。可以购买多个商品。每项活动中显示的内容可能因购买的内容而异。我有一个BillingReceiver
方法purchaseStateChanged()
。我需要在purchaseStateChanged()
内做的是,无论哪个活动正在运行,请无效?/刷新?屏幕。有没有一种标准的方法呢?
编辑:看看Simon的评论,只是为了让答案更容易,让我们说当BillingReceiver收到对buyStateChanged()的调用时,可以运行两个活动中的一个,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 :(得分: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中添加两次相同的侦听器来改进记帐接收器类。