0

この男と似たような質問がありますが、少し異なります。元の質問で、彼は言います

新しいアクティビティを開始し、現在のアクティビティからデータを渡すとします。

最初の答えは Extras に物を入れることについて話しているので、おそらく彼は Intents を渡すことについて話している.

しかし、同じアクティビティの 2 つのインスタンス間のみを渡したい場合はどうでしょうか? たとえば、画面を回転すると、アクティビティの「古い」インスタンスが破棄され、「新しい」インスタンスが作成されます。これらの間で情報を渡す方法は、バンドルを使用することです。onSaveInstanceState.putXXX と .getXXX でプリミティブ データ型を渡す方法を知っています。しかし、オブジェクトの配列がある場合はどうなるでしょうか? これらをバンドルで渡すにはどうすればよいですか? 私の唯一の選択肢は Parcelable と Serializeable だけですか?*

*静的変数を使用したくない場合

4

1 に答える 1

1

基本的に、ここにはいくつかのオプションがあります。

オプション 1は、Activity.onSaveInstanceState()メソッドを使用することです。そこで、すべてをBundleクラスのインスタンスに格納します。バンドルには、シンプル、パーセル可能、またはシリアライズ可能な型が必要です。配列も渡すことができますが、これらはそれらの型の配列でなければなりません。

オプション 2は、 Activity.onRetainCustomNonConfigurationInstance()をオーバーライドし、そこから配列を返すことです。このアクティビティの新しいインスタンスは、Activity.getLastNonConfigurationInstance()を呼び出してこの配列を取得できます。このオプションは正常に機能しますが、既に推奨されていません。ここで、3 番目のオプションの出番です。

オプション 3は、保持された Fragment を使用することです。ここでのアイデアは、フラグメントを作成し、このフラグメントの onCreate() または onCreateView() でFragment.setRetaineInstance(true)を呼び出すことです。呼び出されると、このフラグメントは「保持」されます。デバイスをローテーションすると、新しいローテーションごとに新しいアクティビティ インスタンスが作成されますが、保持されたフラグメントの同じインスタンスがアクティビティのすべての新しいインスタンスに渡されます。配列をそこに保持すると、すべての新しいアクティビティ インスタンスですぐに使用できるようになります。これは行く方法です。

オプション 1 は永続化されることに注意してください。アプリがバックグラウンドになり、Android がそれを強制終了し、後で再起動した場合、配列が onCreate(Bundle savedInstanceState) に配信されます。これとは対照的に、オプション 2 と 3 は状態を失います。アクティビティが作成されるたびにアレイを再作成できる場合は、オプション 2 または 3 を使用できます。

于 2013-08-18T20:38:34.933 に答える