`

解决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)
.......
程序背景:使用TabHost,需要在子界面中添加Spinner按钮。
问题:Spinner按钮不能点击,点击出现unable to add window...is your activity running?的错误。
探索:
    由于点击Spinner之后,会弹出一个dropdown item的选项卡,我认为unable to add window应该是这个选项卡没有可以添加上去的activity。从错误的最后一句也能看出程序认为它需要的那个activity并没有在运行。那Spinner究竟需要哪个activity?哪个activity是当前在运行的?
    思前想后,没有想明白。在网上找了些资料,有一个博客上是这么说 AlertDialog.Builder(xxx.this) => AlertDialog.Builder(this.getParent()) 。我按照这个来试了一下,不加this.getParent()会出现上面的错误,加了就没问题。由此可见当前activity应该是tabhost,而不是每个tab对应的activity。
于是把代码改成下面这样子,注意红色部分:
View views = LayoutInflater.from(getParent()).inflate(R.layout.shiji_orderplace_view_0, null);
Spinner simple_input_5 = (Spinner) views.findViewById(R.id.simple_input_5);
String[] items=   {"非连续", "连续"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item ,items);
adapter.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item);
simple_input_5.setAdapter(adapter);
分享到:
评论
1 楼 Angelet 2015-04-15  

相关推荐

    使用ActivityGroup管理Activity

    总的来说,虽然`ActivityGroup`为早期的Android开发提供了一种在单一窗口展示多个Activity的方法,但由于其已被弃用和存在的问题,现代开发应当优先考虑使用Fragment。对于那些仍然需要支持旧版Android系统且项目中...

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

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

    ActivityGroup之activity内跳转和外跳转

    5. **外跳转处理**:在子Activity中,当需要跳转到不在ActivityGroup内的Activity时,使用`startActivityForResult()`或`startActivity()`,然后在ActivityGroup中监听并处理结果,以保持返回栈的正确性。...

    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

    在上面的代码中,我们使用 Intent 来启动不同的 Activity,并且使用 startSubActivity 方法来在 ActivityGroup 中启动这些 Activity。然后,我们可以使用 setContentView 方法来加载不同的ContentView。 最后,我们...

    tabhost和ActivityGroup的组合使用

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

    ActivityGroup实现Activit栈

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

    activitygroup

    `ActivityGroup`在早期的Android版本中被用来解决在同一个栈内管理多个`Activity`的需求,但在Android 3.0(API Level 11)之后,官方推荐使用`Fragment`来替代,因为`Fragment`提供了更灵活且性能更好的解决方案。...

    ActivityGroup和ViewPager组合实现微信模仿

    对于ActivityGroup的使用,你需要确保正确处理Activity的生命周期,避免内存泄漏和状态恢复的问题。而使用ViewPager时,要注意滑动事件的处理,以及在页面之间共享数据的方法,例如使用ViewModel或者Fragment之间的...

    android ActivityGroup的demo

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

    TabHost, ActivityGroup 的使用例子

    这种方式虽然能实现类似Fragment的效果,但因为ActivityGroup的局限性,建议尽量避免在新项目中使用。 总的来说,TabHost和ActivityGroup是Android早期的组件,现在已经被Fragment和FragmentManager所取代。虽然...

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

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

    ActivityGroup应用实例

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

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

    通过在ActivityGroup中使用LocalActivityManager,我们可以管理和控制这些子Activity的生命周期。 实现这个功能的具体步骤如下: 1. 创建Gallery:首先,你需要在布局文件中添加一个Gallery组件,并设置适配器来...

    ActivityGroup框架

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

    ActivityGroup

    - **兼容性问题**:从Android 3.0(API级别11)开始,官方推荐使用Fragments替代ActivityGroup,因此在高版本系统上,ActivityGroup可能会出现不兼容或者不稳定的情况。 - **性能**:ActivityGroup相比Fragments在...

    gridview+activityGroup实现tab分页

    在Android开发中,创建一个具有分页功能的Tab布局是常见的需求,这通常涉及到GridView和ActivityGroup的结合使用。下面将详细解释这两个组件以及如何利用它们实现Tab分页。 首先,`GridView`是Android的一种视图...

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

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

Global site tag (gtag.js) - Google Analytics