在处理片段时,我总是在事务中使用replace(),但我希望不必再保存实例状态来恢复片段的视图,并在返回到该片段时防止重新加载。所以,我决定和add()一起工作。问题是,当我添加另一个片段时,前面的片段视图保留在后台,这很好(这就是我所期望的行为),但问题是我实际上可以与背景中的视图交互。示例:
片段A有一个Button
片段B有一个TextView
当我添加片段A和稍后添加片段B时,我可以单击片段A的 Button,甚至可以停留在片段B的视图上。
我在用:
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction().
add(getRootViewContainer(),fragment,fragment.getClass().getSimpleName());
if (shouldGoBack)
fragmentTransaction.addToBackStack(fragment.getClass().getSimpleName());其中,getRootViewContainer()返回用作活动主容器的FrameLayout的id。
现在,它真的是add()的默认行为吗?
如果是这样的话,是否有适当的方法来避免这种情况,或者只需要使用replace()
发布于 2015-01-13 14:53:17
FragmentTransaction.hide(fragmentBehind); //works for me!例子:
//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();发布于 2015-01-13 15:04:11
在这里,您可以做的只是在当前片段的事务处理时隐藏以前的片段。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment newFragment= new MyFragment ();
ft.hide(CurrentFragment.this);
ft.show(newFragment);
ft.commit();对我来说管用只要试试就行了。
发布于 2015-01-13 14:47:45
是的,这是add()的默认行为。如果您真的不希望用户替换(),可以尝试禁用“旧”片段中的视图。
https://stackoverflow.com/questions/27924725
复制相似问题