首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碎片android定位丢失碎片

碎片android定位丢失碎片
EN

Stack Overflow用户
提问于 2013-11-27 16:44:48
回答 1查看 247关注 0票数 3

我正在与方向改变时的碎片丢失作斗争。起初,我的片段似乎对方向变化反应良好,没有任何错误。但当我导航回以前创建的片段时例外。因为我要在我的fragmenthandler活动中检查它。

我选择使用一个大的if语句而不是switch case,因为这在我的知识掌握范围内。if语句的处理工作正常,已经使用日志语句对其进行了调试,似乎没有任何问题。下面是用于处理片段的代码,预先使用或创建一个新的片段。

代码语言:javascript
复制
public void fragmentHandle(Fragment fl, Fragment fr, String tl, String tr) {
    Fragment cFragLeft = manager.findFragmentById(R.id.fragment_left);
    Fragment cFragRight = manager.findFragmentById(R.id.fragment_right);

    Fragment checkLeft = manager.findFragmentByTag(tl);
    Fragment checkRight = manager.findFragmentByTag(tr);

    FragmentTransaction ft = manager.beginTransaction();

    if (cFragLeft != null && cFragRight != null && checkLeft != null
            && checkRight != null) {
        ft.detach(cFragRight).detach(cFragLeft).attach(fr).attach(fl)
                .addToBackStack(null).commit();
    } else if (cFragLeft != null && cFragRight != null && checkLeft == null
            && checkRight == null) {
        ft.detach(cFragLeft).detach(cFragRight)
                .add(R.id.fragment_left, fl, tl)
                .add(R.id.fragment_right, fr, tr).addToBackStack(null)
                .commit();
    } else if (cFragLeft != null && cFragRight != null && checkLeft == null
            && checkRight != null) {
        ft.detach(cFragLeft).detach(cFragRight).attach(fr)
                .add(R.id.fragment_left, fl, tl).addToBackStack(null)
                .commit();
    } else if (cFragLeft != null && cFragRight != null
            && checkRight == null && checkLeft != null) {
        ft.detach(cFragLeft).detach(cFragRight).attach(fl)
                .add(R.id.fragment_right, fr, tr).addToBackStack(null)
                .commit();
    } else {
        ft.add(R.id.fragment_left, fl, tl).add(R.id.fragment_right, fr, tr)
                .commit();
    }
}

当我更改方向,然后导航回以前保存的片段(第一个if语句)时,我的左右两个片段都显示为空白屏幕。只有在调用第一种情况时才会发生这种情况,它似乎不会记住存在的片段,即使fragmentmanager通过标记找到了它们。

我也一直在检查我的onCreate,如下所示。

代码语言:javascript
复制
    protected void onCreate(Bundle savedInstanceState) {
    // super.onCreate
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fragment_handler);

    if (savedInstanceState == null) {
        fragmentHandle(nFragLeft, nFragRight, "menuMain", "main");
    }

}

为了完成,还包含了一个按钮语句。我没有使用过onClickListeners,也不确定我是否应该更喜欢它而不是xml onClick。

代码语言:javascript
复制
    public void sendDestination(View v) {
    nFragLeft = menudestFrag;
    nFragRight = destFrag;
    String tagLeft = "menuDestination";
    String tagRight = "destination";

    fragmentHandle(nFragLeft, nFragRight, tagLeft, tagRight);
}

有什么办法可以解决这个问题吗?仅在更改方向后发生。

EN

回答 1

Stack Overflow用户

发布于 2013-11-27 17:47:39

这是因为当方向改变时,你的活动就会发生。

您可以在清单中添加android:configChanges="orientation|screenSize"来解决此问题(避免在方向更改时重新创建活动):

代码语言:javascript
复制
<activity
        android:name="com.example.MyActivity"
         android:configChanges="orientation|screenSize" >
    </activity>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20237528

复制
相关文章

相似问题

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