2016-07-15 39 views
0

改變手機語言並重新啓動我正在開發Android應用程序,並面臨着一些奇怪的問題。而應用程序在後臺和用戶更改手機語言,並從後臺重新啓動應用程序,然後應用程序強制停止。應用程序崩潰之後,從背景

奇怪的是,應用程序崩潰,只有當我改變語言從英語翻譯成法語,但同時改變從法語到英語或其他語言,將沒有任何崩潰的工作。下面是錯誤日誌 -

過程:com.myapp,PID:17745 java.lang.IllegalStateException:活動已在android.support.v4.app.FragmentManagerImpl.enqueueAction被破壞 (FragmentManager.java:1515 ) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638) at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:621) at android.support.v4.app .FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:162) 在android.support.v4.view.ViewPager.populate(ViewPager.j ava:1177) at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545) at android.view。 View.measure(View.java:18794) at android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:715) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) at android.view.View。測量(View.java:18794) 在android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:715) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) at android.view.View.measure(視圖的.java:18794) 在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 在android.widget.LinearLayout.measureVertical(LinearLayout.java :748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18794) at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout .java:1075) at android.view.View.measure(View.java:18794) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.o nMeasure(FrameLayout.java:194) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:18794) at android.view。 ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 在android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 在android.widget.LinearLayout。 onMeasure(LinearLayout.java:630) 在android.view.View.measure(View.java:18794) 在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 在android.view.View.Group.measureChildWithMargins(ViewGroup.java:5951) 在android上。 widget.LinearLayout。measure.ChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure( View.java:18794) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2643) at android.view.View.measure(View.java:18794) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) at和roid.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) 在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 在機器人。 view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6013) at android.view.Choreographer $ CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit的.java:616)

回答

0

這似乎是一個錯誤已經從添加的嵌套片段支持的功能出現。

基本上,當FragmentManager從活動中分離出來時,它的內部狀態會被破壞。

試試這個在您的片段:

@Override 
public void onDetach() { 
    super.onDetach(); 
    try { 
     Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager"); 
     childFragmentManager.setAccessible(true); 
     childFragmentManager.set(this, null); 

    } catch (NoSuchFieldException e | IllegalAccessException e) { 
     throw new RuntimeException(e); 
    } 
} 

讓我知道,如果它的工作原理。

問候,

0

這是因爲當您更改設備的語言片段的新實例創建,並且應用程序試圖找到新的實例。

您需要將您的片段的實例存儲在List中以避免此類型異常。

如果你提供你的代碼添加片段的地方,那麼它會更清晰。