解决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);

你可能感兴趣的:(exception,String,dropdown,null,input,token)