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