在我的Android应用程序中,片段将通过特定操作添加到活动中(例如,操作栏菜单)。
这是我添加片段的代码:
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;
现在,一旦用户点击标识为action_add_box
两次的操作菜单,他就必须向后击两次以关闭不期望的片段。
有可能避免这种情况吗?
例如,一旦用户点击操作菜单,如果片段已经对用户可见,则不执行任何操作?
还有一个问题,片段中有一些EditTexts,一旦用户完成,我将提交数据并关闭片段,但是用户可能需要再次打开片段,我想保留EditText的值最后由用户输入。现在,我在分离片段时保存值,并在使用savedInstanceState
创建时重置值。
同样为每个动作命令创建一个新的片段实例是浪费内存,我想知道我是否只能使用一个片段实例,那么我可能不需要手动保存/重置这些值吗?
答案 0 :(得分:0)
你可以使用单例模式来保留一个片段实例,例如:
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
}