10

MainFragment でビューモデルを作成します。

 @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
   ...
    MainViewModel mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
   ...
}

ユーザーがアイテムを選択してから詳細フラグメントに移動すると、このトランザクションがバックスタックに追加されます。

 getFragmentManager()
                .beginTransaction()
                .replace(R.id.root, Details.newInstance())
                .addToBackStack(null)
                .commit();

ユーザーが詳細フラグメントで戻ると、すべて問題ありませんが、ユーザーが詳細フラグメントでデバイスを回転させてから押すと、次のようになります。

  • ViewModel の新しいインスタンスが MainFragment 用に作成されます
  • 古いインスタンスはまだ生きています (メソッド onCleared は呼び出されません)

これは ViewModelProviders のバグですか? これを修正する方法は?私の意見では、ViewModel を復元する必要があります。

4

3 に答える 3