2

オブジェクトを分割可能にし、それをバンドルに入れて、バンドルを使用してフラグメントを作成する場合、質問は簡単です。オブジェクトは複製されますか、それとも参照されますか。

コンテキスト。

ArrayList に格納/参照されているオブジェクトを取得しました。ArrayList 内のオブジェクトのタイプによって異なります (ポリモーフィズムが使用されます)。それを処理するのに適したフラグメントを作成します。

このオブジェクトもフラグメントに渡す必要があります。フラグメントは、カスタム ビュー ページャー内で使用されます。私はオブジェクトを複製したくありません。パーセル可能なクローンオブジェクトのようです。

もう 1 つの方法は、オブジェクトのインデックスを ArrayList に渡すことです。次に、getActivity().myList.get(Integer passed to ) を使用して、フラグメントから arraylist への参照を取得します。しかし、私にはあまり安全ではないようです (ArrayList の内容は変更される可能性がありますが、単にすべてを削除してやり直すだけです)。デフォルトの引数なしコンストラクターを使用して再作成される可能性があるため、フラグメントコンストラクターに引数を渡さないようにする必要があることも読みました。

(現在、再作成されたフラグメントを破棄していますが、正しいビューに再接続する際に奇妙な問題があるため、別の投稿)。

新しいサブ質問: フラグメントへの参照によって値を渡す方法はありますか?

4

1 に答える 1

5

オブジェクトを分割可能にし、それをバンドルに入れて、バンドルを使用してフラグメントを作成する場合、質問は簡単です。オブジェクトは複製されますか、それとも参照されますか。

すぐにではないにしても、他の時点で複製される場合があります (たとえば、フラグメントの引数Bundleがインスタンスの状態に含まれる場合)。

デフォルトの引数なしコンストラクターを使用して再作成される可能性があるため、フラグメントコンストラクターに引数を渡さないようにする必要があることも読みました。

正しい。

もう 1 つの方法は、オブジェクトのインデックスを ArrayList に渡すことです。次に、getActivity().myList.get(Integer passed to ) を使用して、フラグメントから arraylist への参照を取得します。しかし、私にはあまり安全ではないようです (ArrayList の内容は変更される可能性がありますが、単にすべてを削除してやり直すだけです)。

を使用しないでくださいArrayListHashMap耐久性のあるキーを使用してください。キーをフラグメントに渡します。キーを介してフラグメントにデータを取得させます。このオブジェクトを削除する (つまり から削除するHashMap) 人は、このフラグメントが存在しない場合にのみ削除するか、このシナリオの処理方法を認識できるようにこのフラグメントに通知してください。

于 2012-07-13T16:53:58.303 に答える