目に見えないアクティビティで発生している目に見えるアクティビティの変更を複製できるかどうかを知りたいです。
たとえば、アクティビティ A で整数をインクリメントするループがあり、その整数をエクストラとして渡してアクティビティ B を呼び出します。
(A で発生している) インクリメントが B に反映されていることを確認する方法はありますか?
前もって感謝します。
目に見えないアクティビティで発生している目に見えるアクティビティの変更を複製できるかどうかを知りたいです。
たとえば、アクティビティ A で整数をインクリメントするループがあり、その整数をエクストラとして渡してアクティビティ B を呼び出します。
(A で発生している) インクリメントが B に反映されていることを確認する方法はありますか?
前もって感謝します。
intはプリミティブ型であるため、アクティビティBに渡すときにint型の変数は変更されません。
int型のラッパーを渡すことをお勧めします(つまりclass IntWrapper { int value; }
)
を増やすと、変更が反映されますvalue
。
ブロードキャスト レシーバーを使用してデータを渡すこともできます。
リスニング アクティビティ/フラグメントで、レシーバーを作成して登録します (oncreate または onresume または何か、場合によっては onrestart でこれを行います)。アクティビティがブロードキャストをリッスンするようになり、組み込みのキーワードを使用して、その受信者向けのブロードキャストかどうかをテストします。ブロードキャストはインテントを使用して行われるため、そのインテントに保存されている他のデータ (int など) を取得して使用することもできます。
my_broadcast_reciever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {String action = intent.getAction();
if (action.equals("finish_buy_activity"))
//do whatever
}
}
};
registerReceiver(my_broadcast_reciever, new IntentFilter("theKeywordThisBCRRespondsTo"));
onpause または ondestroy でレシーバーを登録解除することを忘れないでください (レシーバーを登録する場所に応じて、最も意味のある方法を選択してください)。
{unregisterReceiver(my_broadcast_reciever);
ここで、データを送信するために使用するアクティビティ/フラグメントで、そのようにインテントを起動します (更新のたびに新しいオブジェクトを作成し続けないように、より高いレベルでインテントを作成して保持することをお勧めします) ):
Intent sintent = new Intent("theKeywordThisBCRRespondsTo");
//maybe also do: sintent.addInt(int); or something
sendBroadcast(sintent);
これは、場合によっては少しやり過ぎかもしれませんが、アクティビティ/フラグメント間でデータを通信および送信するための優れた方法であることを覚えておいてください。