2012-11-12 141 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