Spinner вызывает падение приложения Android - PullRequest
4 голосов
/ 09 марта 2012

Я использую счетчик, чтобы показать идентификатор страны. Все вроде нормально, пока я не запустил приложение и не нажал на счетчик. После того, как я нажму на спиннер, приложение вылетает.

Вот мой 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);

Также это country_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)

Я прочитал все доступные посты, и ни одна из них не решила мою проблему.

Большое спасибо заранее!

Ответы [ 3 ]

4 голосов
/ 09 марта 2012

Я бы посоветовал вам попробовать передать YourActivityName.this вместо getApplicationContext() как Context на ваш адаптер.

Используете ли вы ActivityGroup или просто Activity?

Если вы используете ActivityGroup, то это может вызвать проблему неверного токена окна.После почтового адреса проблема с ActivityGroup

3 голосов
/ 09 марта 2012

Это из-за вашего контекста,

Вместо getApplicationContext() используйте контекст вашей деятельности, используя эту ссылку

Например.

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

или, если вы используете группы действий, укажите контекст вашей группы действий.

Например.

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(  
                       activity.group,R.array.countries_array,
                       android.R.layout.simple_spinner_item);
0 голосов
/ 09 марта 2012

Пользователь использует контекст родительского действия вместо использования текущего действия Измените строку, как показано ниже

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

Также вы можете сослаться на эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...