zoukankan      html  css  js  c++  java
  • 解决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之上的。

  • 相关阅读:
    和菜鸟一起学android4.0.3源码之硬件gps简单移植
    Android学习笔记(三一):线程:Message和Runnable
    Android Runnable 运行在那个线程
    Android 的消息队列模型
    iOS开发UI篇—iOS开发中三种简单的动画设置
    ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明
    ios开发UI篇—Kvc简单介绍
    iOS开发UI篇—从代码的逐步优化看MVC
    iOS开发UI篇—字典转模型
    iOS开发UI篇—九宫格坐标计算
  • 原文地址:https://www.cnblogs.com/xuewater/p/2631039.html
Copyright © 2011-2022 走看看