アクティビティには、オブジェクトのリストを含むフラグメントがあります。このフラグメントは、リスト項目の詳細を含む別のフラグメントに置き換える必要があります。詳細フラグメントがアクティブで、戻るボタンが押された場合、リストフラグメントを再開する必要があります。
私のコード:
@Override
public void onBackPressed() {
if (detailsFragment.isVisible())
{
goToListFragment();
}
}
}
public void goToListFragment() {
String backStateName = listFragment.getClass().getName();
FragmentManager fm = getSupportFragmentManager();
boolean fragmentPopped = fm.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped){ //fragment not in back stack, create it.
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.main_fragment_container, listFragment);
ft.addToBackStack(backStateName);
ft.commit();
}
}
public void goToDetailsFragment(String foodAsJSON) {
String backStateName = detailsFragment.getClass().getName();
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_fragment_container, detailsFragment)
.addToBackStack(backStateName)
.commit();
}
私が観察するもの:
listfragment: onPause()
<back pressed in details view>
listfragment: oncreateView()
listfragment: onResume()
したがって、戻るボタンが押されると、onResume関数のみが呼び出されることが期待されます。実際、それはフラグメントのライフサイクルでどのように説明されているかです。しかし、私が観察したように、oncreateView()も呼び出されます。これにより、フラグメントが完全にリロードされますが、これは望ましい動作ではありません。では、マスター フラグメントを適切に再開するにはどうすればよいでしょうか。