我正在使用微调器显示国家/地区ID。在我运行应用程序并单击微调器之前,一切似乎都很好。点击微调器后,应用程序崩溃。
这是我的spinner 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 :(得分:4)
我建议您尝试将YourActivityName.this
而不是getApplicationContext()
作为Context
传递给您的适配器。
您使用的是ActivityGroup
还是简单的Activity
?
如果您使用ActivityGroup
,则可能会导致窗口令牌错误。以下帖子解决了ActivityGroup
答案 1 :(得分:3)
这是因为你的背景,
而不是getApplicationContext()
使用此引用
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);
答案 2 :(得分:0)
使用父活动的上下文而不是使用当前活动 改变如下所示的行
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
getParent(), R.array.countries_array,
android.R.layout.simple_spinner_item);
您也可以参考此link