`

解决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之上的。

分享到:
评论
2 楼 Turr 2013-08-13  
楼主给力,解决了我遇到的问题
1 楼 yeyuweiliang 2012-08-16  
楼主你好~你的代码解决的报错问题~但是为什么Spnner这个时候加载不进去数据?不知道你遇到这个问题没》麻烦之处,不胜感激

相关推荐

    使用ActivityGroup管理Activity

    然而,有时开发者可能需要在同一个栈中管理多个Activity,这时`ActivityGroup`就派上了用场。`ActivityGroup`是早期Android版本(Android 2.x)提供的一种特殊类型的`ViewGroup`,允许在同一个`TabHost`或`...

    用ActivityGroup解决TabHost中多个Activity跳转问题

    Fragment可以像Activity一样拥有自己的UI和生命周期,而且可以在同一个Activity中进行动态添加、删除和替换,解决了ActivityGroup的一些问题,同时也更符合Android设计原则。 在升级到使用Fragment时,需要注意以下...

    ActivityGroup之activity内跳转和外跳转

    ActivityGroup是一种旧版的Android实现,它允许在一个Activity中嵌套多个子Activity,这在早期版本的Android系统中常用于实现类似TabHost的效果。然而,自Android 3.0(API级别11)起,Android引入了Fragment的概念...

    ActivityGroup之Activity内跳转和外跳转

    ActivityGroup是早期Android SDK中的一个特殊类型,它允许在一个Activity中嵌套多个子Activity,形成类似TabHost或者多窗口的效果。然而,从Android 3.0(API级别11)开始,ActivityGroup被废弃,推荐使用Fragment来...

    使用ActivityGroup来切换Activity和Layout

    `ActivityGroup`是`TabActivity`的一种替代方案,它允许我们在一个父`Activity`中嵌套多个子`Activity`,并在需要时动态替换内容。 首先,我们需要了解`ActivityGroup`的核心概念。`ActivityGroup`是`Sherlock`库中...

    Android开发—使用ActivityGroup来切换Activity和Layout.pdf

    在Android开发中,ActivityGroup是一种特殊类型的Activity,它允许开发者在一个Activity内嵌套其他Activity,实现类似TabHost或Fragment的效果,但这是在Android早期版本(API级别较低)中的一种实现方式。...

    Android开发—使用ActivityGroup来切换Activity和Layout

    ActivityGroup 是 Android 中的一种特殊的 Activity,它可以容纳多个 Activity,并且可以在这些 Activity 之间进行切换。使用 ActivityGroup,可以实现非常复杂的界面跳转逻辑,而不需要使用 Fragment 或者其他第三...

    activitygroup

    综上所述,`ActivityGroup`是Android早期实现多`Activity`管理的一种方式,尽管现在已经被`Fragment`取代,但理解其工作原理有助于我们更好地理解和解决老项目中的问题。在开发新的应用时,建议使用`Fragment`以获得...

    ActivityGroup实现Activit栈

    在Android开发中,ActivityGroup是早些版本API中提供的一种特殊类型的Activity,它允许开发者在一个TabHost或者帧布局(FrameLayout)中嵌套多个Activity,从而实现类似iOS中UINavigationController的堆叠管理器效果...

    ActivityGroup和ViewPager组合实现微信模仿

    在早期的Android SDK版本中,ActivityGroup是一个可以嵌套多个Activity的容器,它允许开发者在一个Activity内启动另一个Activity,从而实现类似TabHost的效果。然而,由于它存在一些局限性和问题,如内存泄漏和生命...

    android ActivityGroup的demo

    首先,ActivityGroup是Android早期版本(API Level 10及以下)提供的一种解决方案,用于实现在一个Activity中展示多个子Activity的效果。然而,自Android 3.0(API Level 11)起,官方推荐使用Fragment替代...

    ActivityGroup应用-如何把一个Activity加载成一个视图

    在Android开发中,ActivityGroup是一种老式的容器组件,它允许开发者在一个Activity中嵌套其他Activity作为子视图。然而,自Android 3.0(API级别11)开始,这个功能已被Fragment替代,因此现在使用ActivityGroup并...

    tabhost和ActivityGroup的组合使用

    在实际项目中,我们可以将TabHost和Fragment结合使用,每个标签页都包含一个Fragment容器,然后在Fragment之间进行切换,这样既能实现动态内容加载,又能避免因使用ActivityGroup带来的潜在问题。对于旧项目改造,...

    Android Gallery+ActivityGroup实现滑动TAB独立Activity

    "Android Gallery+ActivityGroup实现滑动TAB独立Activity"是一种早期的Android开发技术,虽然现在已经被更先进的Fragment所取代,但理解这一模式对于理解Android应用的演化历程以及如何处理旧代码库中的遗留问题仍然...

    ActivityGroup应用实例

    在Android开发中,ActivityGroup是一种特殊的Activity类型,它允许开发者在一个Activity中嵌套其他Activity,形成多层级的界面结构。这个“ActivityGroup应用实例”应该是一个详细的教程,旨在帮助开发者理解如何...

    ActivityGroup框架

    GroupDemo项目中的修正调用系统Activity的Bug,可能是解决了当在ActivityGroup内部调用系统Activity(如Intent.ACTION_PICK)时,导致的生命周期混乱问题。在这样的情况下,可能需要手动处理启动系统Activity的返回...

    ActivityGroup Demo

    在Android应用开发中,`ActivityGroup`是一个较旧的概念,主要用在早期的Android版本(API级别较低)中,用于在一个TabHost或者自定义容器中管理多个Activity。`ActivityGroup`是`TabActivity`的一个子类,它允许...

    统一管理Activity,每个Activity又相对独立

    为了解决这个问题,开发者有时会采用一种称为"Activity Group"的技术,来实现对Activity的统一管理和保持各个Activity相对的独立性。 "Activity Group"是一种非标准但实用的方法,它允许我们将多个Activity组织在一...

    gridview+activityGroup实现tab分页

    接下来,`ActivityGroup`是Android早期版本(API 13以下)中用于实现嵌套Activity的一种方式,它允许在一个Activity内包含其他Activity。在TabHost中,我们可以使用ActivityGroup来实现每个Tab下的不同页面。然而,...

    Android中ActivityGroup的应用

    ActivityGroup的用法,头部和底部为固定布局中间动态显示界面 并在中间布局实现手势滑动效果,自定义SlidingDrawer(抽屉)效果,在ActivityGroup里执行跳转等功能。至于在Android在ActivityGroup里执行跳转详细介绍 ...

Global site tag (gtag.js) - Google Analytics