干し石榴長文用

長文以外はTumblrへ徐々に移します。

二重TabActivityでDialog表示できない

二重にネストしたTabActivityの子Activity*1からDialogを作成すると強制終了します.

android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@47be3840 is not valid; is your activity running?
     at android.view.ViewRoot.setView(ViewRoot.java:505)
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
     at android.view.Window$LocalWindowManager.addView(Window.java:424)
     at android.app.Dialog.show(Dialog.java:247)
     at android.app.Activity.showDialog(Activity.java:2556)
     at android.app.Activity.showDialog(Activity.java:2514)
     …

この場合は親のコンテキストで作成すればOK.

Activity parent = this.getParent();
Context context = ( parent == null ? this : parent );
new AlertDialog.Builder( context )
		.setMessage( R.string.hoge )
		.show();

いやしかしまどろっこしいので二重TabActivityは避けた方が良いです.

*1:根っこを1階層目とすると3階層目のActivity