2017-01-18 4 views
0

私はRealmChangeListenerを実装したフラグメントAを持っています。フラグメントAからフラグメントBに行くことができます。フラグメントBではいくつかのデータを変更することができ、次にpopBackStack()/backPressedでフラグメントBに加えられた変更それは明らかですか?レルムオブジェクトはすぐに更新されませんか?

シナリオ

  1. フラグメントA(ディスプレイの顧客情報)
  2. 断片B
  3. 戻る
  4. フラグメントAを押す(ユーザーの変更などの顧客名) - 新しい顧客名を表示

最後のステップでは、古い顧客名しか表示されません。私は再びフラグメントBに行くと、最終的に私は新しい名前を見ることができ、別のものには、フラグメントAに戻って私は新しい名前が表示されます。

質問:FIRSTがフラグメントBからフラグメントAに戻った直後に新しい名前を表示できないのはなぜですか?

コードを表示したい場合は、お気軽にお問い合わせください。

EDIT

私はUIを更新していないよので、いや、それは...ないフラグメントAに戻ってナビゲートした後、レルムは、新たなデータを得るために再び照会されます。

+1

フラグメントのライフサイクルと、新しいフラグメントに移動するとどうなるでしょうか。 –

+0

@ TimCastelijns確かに...私は、レルムのクエリを呼び出すメソッドがポップスタックの後に呼び出されることを確認しました... – kristyna

答えて

0

これは、あなたがその音によって抱いている問題です。

  • あなたは、あなたが戻っへナビゲートフラグメントBに移動して、レルムオブジェクトXデータ
  • を更新フラグメントAが作成されると、UIがあなたのレルムオブジェクトX.
  • からデータが移入されていますフラグメントAに適用され、UIはフラグメントBにRealmオブジェクトXの変更を反映していません。

解決策は、RealmオブジェクトXに行った変更を反映するためにUIを更新する必要があります。これは、フラグメントAのonResume()メソッドでこれを行います。ここでは、t RealmオブジェクトXから新しいデータを取得し、それに応じてUIを更新します。

要するに、データオブジェクトが更新されたのは、フラグメントAのonCreate()メソッドでUIにデータが入力された可能性が高いためです。この新しいデータは表示されませんバックフラグメントB.

+0

アドバイスをありがとうが、その場合はありません。フラグメントBからAにナビゲートするときにオブジェクトXの最新バージョンを取得するためにrealmクエリを呼び出します – kristyna

0

からのフラグメントAへのあなたはonCreateView()でRealmChangeListenerを登録し、onDestroyView()でそれをデタッチする必要がありますが、問題は、あなたが他の上に新しいフラグメントを追加するとき、onDestroyView()が呼び出されるということです。

したがって、RealmChangeListenerは呼び出されません。 RealmChangeListenerを追加する前に、クエリをonCreateView()に再初期化する必要があります。

また、結果へのフィールド参照が保持されていることを確認してください。

関連する問題