Android 多个backbackback被添加到片段事务中
在我的android应用程序中,某个动作(例如,动作栏菜单)会将一个片段添加到活动中 这是我添加片段的代码:Android 多个backbackback被添加到片段事务中,android,android-fragments,Android,Android Fragments,在我的android应用程序中,某个动作(例如,动作栏菜单)会将一个片段添加到活动中 这是我添加片段的代码: case R.id.action_add_box: FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.place, BoxEditFragment.newInstance(null, null));
case R.id.action_add_box:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.place, BoxEditFragment.newInstance(null, null));
ft.addToBackStack(null);
ft.commit();
break;
现在,一旦用户用idaction\u add\u box
点击action菜单两次,那么他必须点击后面两次来关闭不期望的片段
有可能避免这种情况吗
例如,一旦用户点击“操作”菜单,如果该片段已经对用户可见,则什么也不做
还有一个问题,片段中有一些EditText,一旦用户完成,我将提交数据并关闭片段,但是用户可能需要再次打开片段,我希望保留用户上次输入的EditText值。现在,我在分离片段时保存值,并在使用savedInstanceState
创建时重置值
另外,为每个操作命令创建一个新的片段实例是一种内存浪费,我想知道我是否只能使用一个片段实例,那么我可能不需要手动保存/重置值?您可以使用singleton parttern保留一个片段实例,例如:
public class MyFragment extends Fragment{
public static MyFragment oneInstance = null ;
private MyFragment(){
super();
}
public static MyFragment getInstance(){
if (oneInstance == null ){
synchronized (MyFragment.class){
if ( oneInstance == null ){
oneInstance = new MyFragment();
}
}
return oneInstance ;
}
}
上述代码也是线程安全的
MyFragment frag= (MyFragment )getFragmentManager().findFragmentById(R.id.your_fragment_layout);
if(frag == null){
// fragment is not visible
}else{
// fragment is visible
}
可能是store ft.commit()结果并查看此方法,int)