您好我正在处理带有片段的滑动菜单。
Indivisual片段正常工作。但假设用户导航从片段A-> B,现在'B'工作正常,现在如果用户从B-> A开始,则片段'A'从onAttach()
调用。
如果打开任何片段,我想要这样的条件,而不是重新打开它不应该加载整个片段,它应该像我们处理Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
的活动一样恢复。
这是我的代码......
FragmentManager fm = MainActivity.this.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Layout1 fragment = new Layout1();
ft.add(R.id.activity_main_content_fragment, fragment,Layout1.class.getName());
ft.addToBackStack(Layout1.class.getName());
ft.commit();
答案 0 :(得分:1)
回答更新:
阅读文档,有一种方法可以根据事务名称或commit提供的id弹出后台堆栈。使用名称可能更容易,因为它不需要跟踪可能改变的数字并加强“唯一的后栈条目”逻辑。
由于每个Fragment只需要一个后向堆栈条目,因此将后面的状态名称设为Fragment的类名(通过getClass()。getName())。然后在替换Fragment时,使用popBackStackImmediate()方法。如果返回true,则表示后端堆栈中存在Fragment的实例。如果没有,实际执行Fragment替换逻辑。
private void replaceFragment (Fragment fragment){
String backStateName = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
if (!fragmentPopped){ //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.addToBackStack(backStateName);
ft.commit();
}
}
如果从后向堆栈返回一个片段,它不会重新创建片段,而是重新使用相同的实例,并以onCreateView()
中的fragment lifecycle
开头,请参阅片段生命周期。
因此,如果您想存储状态,则应使用实例变量,而不是依赖onSaveInstanceState()