0

FragmentTabsPager の ABS の例に従いましたが、この問題に直面しています:

ただし、B を終了すると、フラグメントは A に接続されなくなります。いくつかのデバッグの後、A の onCreate() メソッドが、次のエントリを含む savedInstanceState で B を終了した後に呼び出されることがわかりました。

android:support:fragments=android.support.v4.app.FragmentManagerState$41bfffe0

私の理解では、FragmentActivity は B を起動する前にフラグメントを保存し、A を再起動した後、フラグメントを復元しようとします。少しトレースしたところ、B を終了した後、これらのアクションが呼び出されることがわかりました。

Activity A: constructor called
Fragment F1: constructor called
Fragment F2: constructor called
Fragment F1: onAttach
Fragment F1: onCreate
Fragment F2: onAttach
Fragment F2: onCreate
Activity A: onCreate
Activity A: TabsAdapter created    
TabsAdapter: addTab android.widget.TabHost$TabSpec@41d949f8
Fragment F1: constructor called
TabsAdapter: addTab android.widget.TabHost$TabSpec@41d965d0
Fragment F2: constructor called
Fragment F1: onActivityCreated
Fragment F1: onCreateLoader
Fragment F2: onActivityCreated
Fragment F2: onCreateLoader
Activity A: onStart
Fragment F1: onResume
Fragment F1: onCreateLoader
Fragment F2: onResume
Fragment F2: onCreateLoader
Activity B: onStop
Fragment F1: onLoadFinished
Fragment F2: onLoadFinished

各フラグメントには 2 つのインスタンスがあり、表示されているフラグメントはアクティビティに関連付けられていません。

どうすればこれを解決できますか? 私は何を間違っていますか?復元されたフラグメントを取得する方法があったとしたら?

前もって感謝します

4

1 に答える 1

0

これを正しく理解していれば、次のことをお勧めします。

  1. FragmentF1 と F2 はActivityA に存在するため、BActivityはいずれかを作成したり、対話を試みたりしてはなりませんFragment
  2. Aにを使用して B をActivity開始させ、Bにアイテム ( F1 に追加する) を Aに戻してもらいます。ActivitystartActivityForResultFragment
  3. ActivityA は、 (あなたが行ったように) をFragment使用して新しいアイテムを F1に送信することを処理する必要があります。interface
  4. Ainterfaceから (メソッドで) 新しいアイテムを受け取ると、 F1 はそのデータを更新し、そのs を更新する必要があります。ActivityFragmentView

注意すべきもう 1 つのことは、 A が にs を 1 回Activityだけ追加することを確認することです。http://developer.android.com/training/basics/fragments/fragment-ui.htmlを参照してください。FragmentonCreatesavedInstanceState

編集

ああ、あなたが求めていることの詳細がわかりました。ここに行く方法はいくつかあります。

  1. FragmentManagerおよび タグ トリックを使用してから を取得FragmentViewPager、必要に応じて更新します。
    • Fragmentこれは、存在しない可能性がonResumeあり、操作する前にチェックする必要がある s を返すため、少し危険です。
  2. データを静的シングルトン、SQLite DB、または設定に入れるように、コントローラーからモデルを分離します。これにより、アプリの他の部分がデータにアクセスして編集できるようになり、データを渡す必要がなくなります。
    • ではonResumeFragmentデータが変更された場合に備えて、データを確認して更新する必要があります。
    • 変更が発生したときに s が既に入っている場合は、メソッドActivityを介してリフレッシュ シグナルを与える必要もあります。interfaceFragmentonResume
    • または、 で を使用しLoaderFragmentデータ セットを監視し、コールバックFragmentを介して の UI を自動更新しinterfaceます。
于 2013-03-14T17:28:48.840 に答える