Android FragmentTransaction add()行为
在处理片段时,我总是在事务中使用Android FragmentTransaction add()行为,android,android-layout,android-activity,android-fragments,fragmenttransaction,Android,Android Layout,Android Activity,Android Fragments,Fragmenttransaction,在处理片段时,我总是在事务中使用replace(),但我希望我不必再保存实例状态来恢复片段的视图,并防止在返回该片段时重新加载。因此,我决定使用add()。问题是,当我添加另一个片段时,前面的片段视图仍保留在背景中,这很好(这是我预期的行为),但问题是我实际上可以在背景中与视图交互示例: 片段A有一个按钮 片段B有一个TextView 当我添加片段A和以后添加片段B时,我能够单击片段A的按钮,甚至可以停留在片段B的视图上 我正在使用: FragmentTransaction fragmentTr
replace()
,但我希望我不必再保存实例状态来恢复片段的视图,并防止在返回该片段时重新加载。因此,我决定使用add()
。问题是,当我添加另一个片段时,前面的片段视图仍保留在背景中,这很好(这是我预期的行为),但问题是我实际上可以在背景中与视图交互示例:
片段A有一个按钮
片段B有一个TextView
当我添加片段A和以后添加片段B时,我能够单击片段A的按钮
,甚至可以停留在片段B的视图上
我正在使用:
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction().
add(getRootViewContainer(),fragment,fragment.getClass().getSimpleName());
if (shouldGoBack)
fragmentTransaction.addToBackStack(fragment.getClass().getSimpleName());
其中getRootViewContainer()
返回我用作活动主容器的FrameLayout
的id
现在,这真的是add()
的默认行为吗
如果是这样,是否有适当的方法避免这种情况,或者只需使用
replace()
?是的,这是add()的默认行为。
如果您确实不想使用user replace(),可以尝试禁用“old”片段中的视图
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment newFragment= new MyFragment ();
ft.hide(CurrentFragment.this);
ft.show(newFragment);
ft.commit();
例如:
//I have it globally available
FragmentTransaction trans = MainActivity.getManager().beginTransaction();
//not globally
FragmentTransaction trans = getFragmentManager().beginTransaction();
MapFragment newFragment = new newFragment();
trans.add(R.id.fragmentContainer, newFragment, tag);
trans.hide(this);
trans.addToBackStack(tag);
trans.commit();
这里可以做的就是在当前片段的事务处理时隐藏上一个片段
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment newFragment= new MyFragment ();
ft.hide(CurrentFragment.this);
ft.show(newFragment);
ft.commit();
这对我很管用,试试看。你找到解决办法了吗?如果你没有,试试下面的一些。我相信我的能用,因为我自己用。嗨,抱歉耽搁了。我使用这种隐藏和显示片段的方法,但我想避免这样的情况,即必须显示一个片段或隐藏另一个片段。你知道我们还有别的办法吗?谢谢。禁用后面布局的焦点?我真的不知道还有什么干净的方法。这种方法最适合我,我使用了大约15种不同的片段。如果我想,我可以有100多个片段,但由于上面的函数,一切都很顺利。