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 を復元する必要があります。