应用程序崩溃,当我浏览第二次嵌套片段 [英] App crashes when I navigate second time to nested Fragment
本文介绍了应用程序崩溃,当我浏览第二次嵌套片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用嵌套的片段与片段可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屋!
查看全文