Esto me está volviendo loco, ya que es algo que he hecho antes, pero no puedo entender por qué no está funcionando ahora ...Android Spinner - onItemSelected/setOnItemSelectedListener no desencadenar
Tengo un menú botón, implementado de la manera habitual a través de un archivo menu.xml
y el método onOptionsItemSelected
con un interruptor en él, que crea y muestra un girador.
He añadido el setOnItemSelectedListener
, pero parece que nunca se dispara. Aparece la rueda giratoria, selecciono una opción o la vuelvo a abrir, ni se llaman onItemSelected
ni onNothingSelected
.
Aquí está todo el código entre el "caso" y "devolver verdadero" de la instrucción de cambio de manejo del botón de menú. (topThis
es una variable que refiere al contexto de la actividad - funciona bien para todas las demás tostadas en la aplicación)
String[] widgetModes = {"Mode 1", "Mode2"};
ArrayAdapter<String> widgetModeAdapter = new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, widgetModes);
widgetModeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner widgetModeSpinner = new Spinner(this);
widgetModeSpinner.setAdapter(widgetModeAdapter);
widgetModeSpinner.setPrompt("Choose Widget Mode");
widgetModeSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id)
{
Toast.makeText(topThis, "derp", Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parentView)
{
Toast.makeText(topThis, "herf", Toast.LENGTH_LONG).show();
}
});
widgetModeSpinner.performClick();
¿Alguna idea? Sospecho vagamente que el hecho de que esté creando el Spinner
programáticamente es el problema ...
quizás pruebe parentView.getContext()? ¿No necesita agregarlo en algún lugar a la interfaz de usuario? - esto puede significar que los eventos de interacción de IU como la selección de elementos no se pasan al Spinner. – Jems
Gracias por el consejo: terminé implementando algo similar. Se agregó un spinner invisible al diseño, se movió todo, excepto el elemento performClick fuera del menú y en uno llamado en crear. Parece que se asegura de que el oyente esté "conectado" al diseño actualmente inflado, o algo así. La posición del código en relación con setContentView (R.layout.main); es importante ... – Greg
Creo que el hecho de que el resto de mi código implique la reinflación ocasional del diseño (utilizando setContentView (R.layout.main);) también causa problemas ... los oyentes ya no se adjuntan si no se vuelven a configurar después de que el diseño es reinflado – Greg