3

アクティビティに複雑なデータオブジェクトがあります。ユーザーがそのオブジェクトのデータを編集したい場合は、フラグメントのようなフローティングダイアログが表示されます。このフラグメントには、データオブジェクトの一部への参照があります。ユーザーは、このフラグメントからそのデータをライブ編集します。たとえば、いくつかの簡単なテキスト編集。

ユーザーがこのデータを編集しているときに、構成が変更されます(有名な向きの変更)。変更すると、以前と同じように、フローティングフラグメントを含むすべてのものがシステムによって自動的に再作成されます。

理由はわかりませんが、AndroidはActivtyを再起動する必要がありましたが、後で手動で作成したものを保存して再読み込みするのはなぜですか?しかし、それは別の質問です。

したがって、フラグメントの新しいクローンが戻っている間、データオブジェクトへの「接続」は失われています。そのデータオブジェクトもなくなり、すべてのユーザー編集が失われた新しいオブジェクトがあるためです。構成変更直前の状態を保存し、後で元に戻したい。

  1. アクティビティは、ユーザーによって起動されているか(最初から開始する必要があります)、システムによって構成で再作成されているかをどのように判断できますか。変更(保存された状態をリロードする必要があります)?

  2. その後、フラグメントのデータオブジェクトへの接続を再確立して、ユーザーが何も起こらなかったように編集を続行できるようにするにはどうすればよいですか?

4

1 に答える 1

1

ほとんどの質問に対して、私はいくつかの良い方法を見つけました:

  • を使用してフラグメントに渡された引数はsetArguments()保持されているようです。
  • Fragmentメソッドの呼び出しonAttach()は保証されています。親とのデータ交換とイベント登録はここにあります。親はActivityまたは別の親である可能性があるFragmentため、チェックFragment.getParentFragment()が必要になる場合があります。
  • AsyncTaskLoaderは保持され、システムによって自動的に再接続されます。フラグメントのデータフェッチ/処理コードはここにあります。
  • カスタムデータマネージャークラスを使用すると、フラグメントはデータオブジェクトへの参照を保持せず、データベースのように数値IDを保持します。
  • 直接参照からのメソッド呼び出しの代わりに、コマンドオブジェクトを使用できます。
  • 親アクティビティに、1つのフラグメントからすべての子フラグメントにイベントをブロードキャストさせます。これは、独立したサブスクライバーとして機能できます。
于 2012-09-04T18:27:50.277 に答える