在一个活动中,有一个包含对象列表的片段。此片段应替换为另一个包含列表项详细信息的片段。当细节片段处于活动状态并按下后退按钮时,应该恢复列表片段。
我的代码:
@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()也被调用了。这会导致片段完全重新加载,这不是想要的行为。那么,如何正确恢复主片段?