2012-03-09 127 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