2

これは、私のアプリケーションが直面していることがわかった反復的な問題であり、DialogFragmentsをいくつか使用することに関連しています。主にプラットフォームレベル8のデバイスを対象にしているので、互換ライブラリを使用しなければならないDialogFragmentsを使用しています。FragmentActivityに戻った後にIllegalStateExceptionが発生しました

問題は、アプリケーションから出て戻ってくるたびに発生します。スタックトレースは次のとおりです。

12-22 14:56:05.819: W/dalvikvm(6384): threadid=1: thread exiting with uncaught exception (group=0x400207d8) 
12-22 14:56:05.949: E/AndroidRuntime(6384): FATAL EXCEPTION: main 
12-22 14:56:05.949: E/AndroidRuntime(6384): java.lang.IllegalStateException: Activity has been destroyed 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1269) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:529) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:102) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.support.v4.view.ViewPager.populate(ViewPager.java:692) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:851) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.View.measure(View.java:8171) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:526) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:304) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.View.measure(View.java:8171) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.View.measure(View.java:8171) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:526) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:304) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.View.measure(View.java:8171) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.View.measure(View.java:8171) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.ViewRoot.performTraversals(ViewRoot.java:801) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.os.Looper.loop(Looper.java:123) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
12-22 14:56:05.949: E/AndroidRuntime(6384):  at dalvik.system.NativeStart.main(Native Method) 

ここでは、最小のMainActivityを取り除きました。

public class MainActivity extends FragmentActivity{ 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
... 
    public void showNewChannelFragmentDialog() { 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog"); 
     if (prev != null) { 
      ft.remove(prev); 
     } 
     ft.addToBackStack(null); 

     // Create and show the dialog. 
     NewChannelDialogFragment newFragment = NewChannelDialogFragment.newInstance(); 
     newFragment.setContext(this); 
     newFragment.show(ft,"dialog"); 
    } 
} 

showNewChannelFragmentDialog()メソッド

にのみ、ユーザが特定のメニューオプションを選択したときに呼び出されるので、私はDialogFragment自体の内容はここには無関係であると考えています。

hereと表示されていますが、私が以前に述べた問題は、ユーザーが一度放置するとアプリケーションが復活するたびに問題が発生することがわかります。

提案がありますか?私はフラグメントを削除し、通常のダイアログを使用することを検討しています。

+0

showNewChannelFragmentDialog?をどこで呼び出しているかを表示できますか。私は、あなたがこのメソッドの内容をコメントすると、あなたがあなたのアプリを再起動したときにエラーが発生していないと思われましたか? – jegumi

答えて

0

多分それが唯一の問題ではないのですが、あなたはあなたのshowNewChannelFragmentDialog()関数の最後に

ft.add(newFragment); 
ft.commit(); //but at least this 

を呼び出す必要があります。

関連する問題