2012-03-09 132 views
4

我使用微调来显示国家ID。一切似乎都很好,直到我运行该应用程序并单击微调。点击微调器后,应用程序崩溃。微调使android应用程序崩溃

这里是我的微调XML代码(这是一个的LinearLayout里面,如果这是很有用):

<Spinner 
     style="@style/mediumBlackDefault" 
     android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" /> 

这里就是我来填充它:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( 
         getApplicationContext(),R.array.countries_array, 
         android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

而且这是countries_array:

<string-array name="countries_array"> 
    <item>AE</item> 
    <item>AF</item> 
    <item>AG</item> 
    <item>AI</item> 
    <item>AL</item> 
    <item>AM</item> 
</string-array> 

最后我得到这些错误:

03-09 11:39:36.944: E/AndroidRuntime(990): FATAL EXCEPTION: main 
03-09 11:39:36.944: E/AndroidRuntime(990): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.view.ViewRootImpl.setView(ViewRootImpl.java:519) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:279) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.app.Dialog.show(Dialog.java:274) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.app.AlertDialog$Builder.show(AlertDialog.java:932) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.widget.Spinner$DialogPopup.show(Spinner.java:672) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.widget.Spinner.performClick(Spinner.java:435) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.view.View$PerformClick.run(View.java:13983) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.os.Handler.handleCallback(Handler.java:605) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.os.Looper.loop(Looper.java:137) 
03-09 11:39:36.944: E/AndroidRuntime(990): at android.app.ActivityThread.main(ActivityThread.java:4340) 
03-09 11:39:36.944: E/AndroidRuntime(990): at java.lang.reflect.Method.invokeNative(Native Method) 
03-09 11:39:36.944: E/AndroidRuntime(990): at java.lang.reflect.Method.invoke(Method.java:511) 
03-09 11:39:36.944: E/AndroidRuntime(990): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-09 11:39:36.944: E/AndroidRuntime(990): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-09 11:39:36.944: E/AndroidRuntime(990): at dalvik.system.NativeStart.main(Native Method) 

我读过的所有可用文章,没有解决我的问题。

非常感谢提前!

+0

感谢就行了!我不得不将所有getApplicationContext()更改为** this **,以使其工作 – tcp 2012-03-09 15:52:59

回答

4

我建议你尝试通过YourActivityName.this而不是getApplicationContext()作为Context到您的适配器。

您是否使用ActivityGroup或简单的Activity

如果使用ActivityGroup,那么它可能会导致不好的窗口令牌的问题。继后解决问题与ActivityGroup

+1

干杯的答复。我只需要将所有getApplicationContext()更改为此! – tcp 2012-03-09 15:54:30

+0

此答案不适用于我。我在一个包含在选项卡活动组中的活动内部进行了微调。我应该怎么办 – 2014-01-23 05:37:45

+0

@PramodJGeorge你应该尝试使用'this.getParent()',看看这个帖子:[微调中的ActivityGroup的儿童不工作(http://stackoverflow.com/a/6611796/ 593709)和这样的:[错误,同时将旋涂器的活动组内(http://stackoverflow.com/a/4644485/593709) – 2014-01-23 06:59:42

3

这是因为你的背景下,

而不是getApplicationContext()使用您的交流tivity的环境中使用该参考

EG。

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( 
         activity.this,R.array.countries_array, 
         android.R.layout.simple_spinner_item); 

,或者如果您使用的活动团体,提供你的活动组的语境。

EG。

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( 
         activity.group,R.array.countries_array, 
         android.R.layout.simple_spinner_item); 
+0

干杯的答复。我只需要将所有getApplicationContext()更改为此! – tcp 2012-03-09 15:54:04

0

用户父活动的上下文,而不是使用当前活动 更改像下面

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( 
         getParent(), R.array.countries_array, 
         android.R.layout.simple_spinner_item); 

您也可以参考所有的答案这link