嗨我想让片段保持活着,即使它不再显示了。因为我有一些AsyncTasks。
首先,我要添加一个起点Fragment
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragmentMenu, menuFragment);
fragmentTransaction.commit();
稍后我将menuFragment
替换为应保持活力的片段
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragmentMenu, btFragment).addToBackStack(null).commit();
最后,我覆盖使用onBackPressed()
popBackStack()
方法
@Override
public void onBackPressed() {
if(getFragmentManager().getBackStackEntryCount() != 0){
getFragmentManager().popBackStackImmediate();
}else{
super.onBackPressed();
}
}
在我的btFragment
里面,即使我弹出另一个片段,我也应该保持活着,我已经在setRetainInstance(true)
方法中设置了onCreate()
。
但是一旦我弹出靠背堆就会被摧毁。
我做错了吗? THX
答案 0 :(得分:0)
setRetainInstance()的文档说明它仅适用于活动娱乐:
控制是否在Activity中保留片段实例 重新创建(例如从配置更改)
答案 1 :(得分:0)
我通过一些解决方法解决了这个问题。如果有人对它感兴趣,这是代码。
// little work-around to not let btFragment die.
Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentMenu);
if (fragment instanceof BTFragment) {
getFragmentManager().beginTransaction().hide(fragment).add(R.id.fragmentMenu, menuFragment).commit();
} else if (getFragmentManager().getBackStackEntryCount() != 0) {
getFragmentManager().popBackStackImmediate();
} else {
super.onBackPressed();
}
基本上我隐藏片段而不是删除它,通过检查当前片段的FrameLayout
,我可以处理不同的片段。这样,我的btFragment就不会调用onDestroy()
方法。