解决ActivityGroup的sub Activity中spinner的WindowManager$BadTokenException的问题

 

在ActivityGroup的sub activity中直接使用Spinner会遇到下面的异常信息:

 ERROR/AndroidRuntime(964): FATAL EXCEPTION: main
 ERROR/AndroidRuntime(964):android.view.WindowManager$BadTokenException: Unable to add window -- token
  android.app.LocalActivityManager$LocalActivityRecord@44f02d20   is not valid; is your activity running?
 ERROR/AndroidRuntime(964):      at android.view.ViewRoot.setView(ViewRoot.java:505)
 ERROR/AndroidRuntime(964):      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
 ERROR/AndroidRuntime(964):      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
 ERROR/AndroidRuntime(964):      at android.view.Window$LocalWindowManager.addView(Window.java:424)
 ERROR/AndroidRuntime(964):      at android.app.Dialog.show(Dialog.java:241)
 ERROR/AndroidRuntime(964):      at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
 ERROR/AndroidRuntime(964):      at android.widget.Spinner.performClick(Spinner.java:257)
 ERROR/AndroidRuntime(964):      at android.view.View$PerformClick.run(View.java:8816)
 ERROR/AndroidRuntime(964):      at android.os.Handler.handleCallback(Handler.java:587)
 ERROR/AndroidRuntime(964):      at android.os.Handler.dispatchMessage(Handler.java:92

…………………………………………

 

 ·第一,你需要在你的sub activity的oncreate方法中获得content view,而不是直接调用系统提供的setContentView(question_activity);

 

我的程序中代码如下:

 View contentView = LayoutInflater.from(getParent().getParent()).inflate(R.layout.question_activity, null);  
     setContentView(contentView); 

     spinner = (Spinner) contentView.findViewById(R.id.spinner_a);
    System.out.println(" 当前选中的spinner = "+spinner.getSelectedItem().toString()); 

 

 

说明:

 

    R.layout.question_activity:是你当前Activity的布局文件。

 

 

 

·第二,要注意:

 

 LayoutInflater.from(getParent().getParent())中from()的参数,是你要显示Spinner的Dialog的页面。

 

 

 

·我认为最主要的原因是:

 

   Spinner的选项是以Dialog的形式显示的(上面的异常信息:at android.app.Dialog.showDialog.java)),是需要显示在总体页面之上的。

 

     比如:

 

    ActivityGroup1里面一个ActivityGroup2,而ActivityGroup2中有一个Activity,在这个Activity里有我们的Spinner,那么点击Spinner弹出的Dialog是显示在ActivityGroup1之上的,而不是显示在ActivityGroup2或者Activity之上的。

 

 

posted @ 2012-08-09 22:57  water0504  阅读(203)  评论(0编辑  收藏  举报