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多个片段,但由于上面的函数,一切都很顺利。