首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FragmentTransaction添加()行为

FragmentTransaction添加()行为
EN

Stack Overflow用户
提问于 2015-01-13 14:44:19
回答 3查看 498关注 0票数 0

在处理片段时,我总是在事务中使用replace(),但我希望不必再保存实例状态来恢复片段的视图,并在返回到该片段时防止重新加载。所以,我决定和add()一起工作。问题是,当我添加另一个片段时,前面的片段视图保留在后台,这很好(这就是我所期望的行为),但问题是我实际上可以与背景中的视图交互。示例:

片段A有一个Button

片段B有一个TextView

当我添加片段A和稍后添加片段B时,我可以单击片段A的 Button,甚至可以停留在片段B的视图上。

我在用:

代码语言:javascript
复制
FragmentTransaction fragmentTransaction = 
            getSupportFragmentManager().beginTransaction().
            add(getRootViewContainer(),fragment,fragment.getClass().getSimpleName());

if (shouldGoBack) 
    fragmentTransaction.addToBackStack(fragment.getClass().getSimpleName());

其中,getRootViewContainer()返回用作活动主容器的FrameLayoutid

现在,它真的是add()的默认行为吗?

如果是这样的话,是否有适当的方法来避免这种情况,或者只需要使用replace()

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-13 14:53:17

代码语言:javascript
复制
FragmentTransaction.hide(fragmentBehind); //works for me!

例子:

代码语言:javascript
复制
//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();
票数 0
EN

Stack Overflow用户

发布于 2015-01-13 15:04:11

在这里,您可以做的只是在当前片段的事务处理时隐藏以前的片段。

代码语言:javascript
复制
 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  Fragment newFragment= new MyFragment ();
  ft.hide(CurrentFragment.this);
  ft.show(newFragment);
  ft.commit();

对我来说管用只要试试就行了。

票数 2
EN

Stack Overflow用户

发布于 2015-01-13 14:47:45

是的,这是add()的默认行为。如果您真的不希望用户替换(),可以尝试禁用“旧”片段中的视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27924725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档