Spinner crashes Android apps

I use spinner to display country id. Everything seems beautiful until I launched the application and clicked on it. After I click on the counter, the application crashes.

Here is my xml spinner code (which is inside LinearLayout, if useful):

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

And here is how I fill it:

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

Also this is 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> 

Finally, I get the following errors:

 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) 

I read all the available posts and no one solved my problem.

Thank you very much in advance!

+4
source share
3 answers

I suggest you try passing YourActivityName.this instead of getApplicationContext() as Context to your adapter.

Are you using an ActivityGroup or just an Activity ?

If you use an ActivityGroup , this may cause a bad window token problem. After the address mail problem with ActivityGroup

+4
source

This is because of your context,

Instead of getApplicationContext() use the Activity context using this link

Eg.

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

or if you use action groups, specify the context of the action group.

Eg.

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

User in the context of parent activity instead of using current activity Change the line as shown below

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

You can also link to this link.

0
source

Source: https://habr.com/ru/post/1400569/


All Articles