0

複数のアクティビティで構成されるアプリがあります。購入できるアイテムは複数あります。各アクティビティ内に表示される内容は、購入したものによって異なる場合があります。私はメソッドを持っBillingReceiverています。purchaseStateChanged()内部で行う必要があるのpurchaseStateChanged()は、実行中のアクティビティがどれであっても、無効にしてください/更新しますか?スクリーン。これを行う標準的な方法はありますか?

編集: Simonのコメントを見て、答えを簡単にするために、BillingReceiverがpurchaseStateChanged()の呼び出しを受信すると、ActivityAまたはActivtyBの2つのアクティビティのいずれかが実行されている可能性があるとしましょう。これらのアクティビティ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
}
4

1 に答える 1

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に同じリスナーを2回追加しないことを確認することで、請求レシーバークラスを改善できます。

于 2012-11-12T15:49:41.373 に答える