Android Spinner Error: android.view.WindowManager $ BadTokenException: No se puede agregar la ventana

Quiero establecer el valor de spinner usando String [] o ArrayList.

He hecho spinner en otra actividad que trabaja fino. En esta actividad dentro de la actividad de la tabulación acivityGroup otra actividad de la lengüeta.

Mi problema es establecer valores en spinner. Spinner está mostrando correctamente Thay significa que cuando carga la actividad, que está funcionando bien, pero cuando hago clic en el hilandero su error de dar:

El error es:

09-30 16:11:37.693: ERROR/AndroidRuntime(699): FATAL EXCEPTION: main 09-30 16:11:37.693: ERROR/AndroidRuntime(699): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@407f4de8 is not valid; is your activity running? 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.view.ViewRoot.setView(ViewRoot.java:527) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.view.Window$LocalWindowManager.addView(Window.java:424) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.app.Dialog.show(Dialog.java:241) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.widget.Spinner.performClick(Spinner.java:260) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.view.View$PerformClick.run(View.java:9080) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.os.Handler.handleCallback(Handler.java:587) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.os.Handler.dispatchMessage(Handler.java:92) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.os.Looper.loop(Looper.java:123) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at android.app.ActivityThread.main(ActivityThread.java:3683) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at java.lang.reflect.Method.invokeNative(Native Method) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at java.lang.reflect.Method.invoke(Method.java:507) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 09-30 16:11:37.693: ERROR/AndroidRuntime(699): at dalvik.system.NativeStart.main(Native Method) 

Este es mi código:

  View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.line_discount, null); this.setContentView(viewToLoad); ArrayList<String> productList = new ArrayList<String>(); int size = products.size()+1; String[] proList = new String[size]; proList[0] = "---Select----"; for(int i = 1; i< size ;i++){ productList.add(products.get(i-1).getDescription()); proList[i] = products.get(i-1).getDescription(); } sp = (Spinner)findViewById(R.id.spProList); ArrayAdapter<String> adapter = new ArrayAdapter<String> (LineDiscountActivity.this, android.R.layout.simple_spinner_item, proList); sp.setAdapter(adapter); 

Esta es mi imagen:

Introduzca aquí la descripción de la imagen

Problema en TabActivity.Because he ejecutado esta parte Dentro de la TabActivityGroup. Su estaba working.When ejecutar esto dentro de la actividad Tab en TabActivityGroup, entonces su un problema. Tengo TabActivtyGroup y dentro de ese TabActivity normal.

¿Cómo puedo hacer en esta situación?

Por favor, que alguien me ayude

Gracias

Creo que tiene problema de contexto.Trate de obtener el contexto utilizando el método de abajo

Puede crear una nueva actividad y establecer su tema en tema de dialog theme para que al iniciar su actividad se muestre como diálogo. Para obtener más información sobre el diálogo, vea más adelante la publicación

haga clic aquí

EDIT2

Encontré una solución para badTokenExcaption

En el método onCreate() su actividad, sustituya la línea setContentView(R.layout.XXXXX) por

 View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.XXXXX, null); this.setContentView(viewToLoad); 

Y reemplace el código del hilandero siguiendo las siguientes líneas

 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.medicine_types, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_item); spDosageType.setAdapter(adapter); 

Su obvio del mensaje de error que el problema es con el contexto usado para crear el hilandero. Prueba esto

 viewToLoad = LayoutInflater.from(this).inflate(R.layout.line_discount, null); 

O

 viewToLoad = getLayoutInflater().inflate(R.layout.line_discount, null); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, proList); sp.setAdapter(adapter); 

Cuando crea su ArrayAdapter debe pasar el Context de su ActivityGroup no el Context de su Activity actual.

He aquí un ejemplo de cómo lo obtengo:

  public class MyActivityGroup extends ActivityGroup{ pulbic static MyActivityGroup sGroup; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sGroup=this; //... } } // Tab Implementation //..... ArrayAdapter<String> adapter = new ArrayAdapter<String> ( MyActivityGroup.sGroup, android.R.layout.simple_spinner_item, proList); 

He intentado con el código. Está funcionando bien:

  View viewToLoad; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewToLoad = LayoutInflater.from(getDialogContext(this)).inflate(R.layout.header_discount, null); this.setContentView(viewToLoad); ArrayAdapter<String> adapter = new ArrayAdapter<String> (viewToLoad.getContext(), android.R.layout.simple_spinner_item, proList); adapter.setDropDownViewResource(android.R.layout.simple_spinner_item); headerDisProdCode.setAdapter(adapter); headerDisProdCode.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view,int arg2, long arg3) { seletcedProductName = parent.getSelectedItem().toString(); seletcedProductCode = (products.get((int) headerDisProdCode.getSelectedItemId())).getProductCode(); } public void onNothingSelected(AdapterView<?> arg0) { } }); 

}

ArrayAdapter context He dado como: viewToLoad.getContext() viewToLoad es el inflar

Tuve este problema también, pero con Fragments, al agregar un fragmento a una vista, y la respuesta para mí era pasar en getApplicationContext() , pero tuve que hacerlo a través de un método separado después de instanciar el fragmento, ya que era Requiriendo el uso de un paquete.

También tuve que hacer lo siguiente al inflar la vista, usando el contexto pasado arriba:

 View v = inflater.from(context).inflate(R.layout.layout_name, ViewGroup container, T/F); 

En vez de simplemente:

 View v = inflater.from(context).inflate(R.layout.layout_name, ViewGroup container, T/F); 

Espero que esto ayude a alguien que lucha con Fragmentos.

 viewToLoad = getLayoutInflater().inflate(R.layout.line_discount, null); (viewToLoad.getContext(), android.R.layout.simple_spinner_item, proList); adapter.setDropDownViewResource(android.R.layout.simple_spinner_item); 

Esto hizo el trabajo para mí

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.