应用程序崩溃,当我浏览第二次嵌套片段 [英] App crashes when I navigate second time to nested Fragment

查看:143
本文介绍了应用程序崩溃,当我浏览第二次嵌套片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用嵌套的片段与片段可well.But当我加载另一个片段在此的FrameLayout,并希望再次加载嵌套的片段,我的应用程序崩溃。

  16 07-14:58:21.272:E / AndroidRuntime(1813):java.lang.IllegalStateException:活动已被破坏
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
07-14 16:58:21.272:E / AndroidRuntime(1813):在me.kaidul.uhunt.Fragment1.onCreateView(Fragment1.java:23)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-14 16:58:21.272:E / AndroidRuntime(1813):在android.support.v4.app.FragmentManagerImpl $ 1.run(FragmentManager.java:429)

我的父类片段:

 公共类片段1扩展SherlockFragment {
    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
            捆绑savedInstanceState){
        查看rootView = inflater.inflate(R.layout.fragment1,集装箱,FALSE);
        片段fragmentC =新HeadlinesFragment();
        片段FRAG =新的儿童();
        FragmentTransaction交易= getChildFragmentManager()调用BeginTransaction()。
        transaction.add(R.id.child_fragment,fragmentC);
        transaction.add(R.id.child_fragment2,FRAG);
        器transaction.commit();
        返回rootView;
    }}

修改
这是我如何添加所有的片段活动:

  FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()。
        //找到位置
        开关(位置){
        情况下0:
            ft.replace(R.id.content_frame,片段1);
            打破;
        情况1:
            ft.replace(R.id.content_frame,fragment2);
            打破;
        案例2:
            ft.replace(R.id.content_frame,fragment3);
            打破;
        }
        ft.commit();


解决方案

这是涉及与嵌套的片段一个已知的bug。这里是解决它的一种方式 - http://stackoverflow.com/a/15656428/574785

I am using Nested Fragment and The Fragment loads well.But when I load another fragment in this frameLayout and want to load the Nested Fragment again, My app is crashing.

07-14 16:58:21.272: E/AndroidRuntime(1813): java.lang.IllegalStateException: Activity has been destroyed
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at me.kaidul.uhunt.Fragment1.onCreateView(Fragment1.java:23)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-14 16:58:21.272: E/AndroidRuntime(1813):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)

My parent Fragment class:

public class Fragment1 extends SherlockFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment1, container, false);
        Fragment fragmentC = new HeadlinesFragment();
        Fragment frag = new Child();
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.add(R.id.child_fragment, fragmentC );
        transaction.add(R.id.child_fragment2, frag );
        transaction.commit();
        return rootView;
    }

}

Edit: This is how I add all the fragments to activity:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        // Locate Position
        switch (position) {
        case 0:
            ft.replace(R.id.content_frame, fragment1);
            break;
        case 1:
            ft.replace(R.id.content_frame, fragment2);
            break;
        case 2:
            ft.replace(R.id.content_frame, fragment3);
            break;
        }
        ft.commit();

解决方案

This is related to a known bug with nested Fragments. Here is one way to work around it - http://stackoverflow.com/a/15656428/574785

这篇关于应用程序崩溃,当我浏览第二次嵌套片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆