从BillingReceiver中刷新屏幕

时间:2012-11-12 14:34:10

标签: android

我有一个由多个活动组成的应用程序。可以购买多个商品。每项活动中显示的内容可能因购买的内容而异。我有一个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
}

1 个答案:

答案 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中添加两次相同的侦听器来改进记帐接收器类。