Tengo un Android Spinner
y me gustaría obtener una devolución de llamada cuando el usuario selecciona algo de su diálogo emergente. Parece que setOnItemClickListener()
o setOnItemSelectedListener()
sería el método correcto de usar, pero ninguno de ellos se invoca cuando selecciono uno de los elementos en la ruleta.¿Cómo obtener una devolución de llamada cuando se cierra un cuadro emergente de Spinner?
¿Hay una forma correcta de hacerlo?
ACTUALIZACIÓN
Por sugerencia de commonsware, hice lo siguiente, pero mi método onItemSelected()
no se está llamando:
final Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(new ArrayAdapter<SettingValue>(getContext(), android.R.layout.simple_list_item_1, android.R.id.text1, setting.getSettingValues()));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d("BOOGA");
final SettingValue settingValue = (SettingValue)parent.getSelectedItem();
final Editor edit = getContext().getSharedPreferences(PREFS_CONTEXT_NAME, Context.MODE_PRIVATE).edit();
edit.putString(setting.name(), settingValue.name());
edit.commit();
}
public void onNothingSelected(AdapterView<?> parent) {
// do nothing
}
});
Gracias por ese código, commonsware. Lo probé y no funciona para mí. El oyente 'onItemSelected()' nunca se llama por alguna razón. Ver mi actualización arriba. ¿Algunas ideas? – emmby
Usted no está usando mi código en absoluto. Si compara los dos, verá que no está utilizando un recurso Spinner en el segundo parámetro para su constructor ArrayAdapter, y tampoco está suministrando un recurso desplegable a ese adaptador. Arregle esas dos cosas y vea si eso aclara su problema. Si no, busca otras diferencias. – CommonsWare
Este es un código muy útil, pero no cubre el caso en el que el usuario 'aborta' la ruleta (es decir, toca fuera de la ruleta para cerrarla). El código de Spinner nativo tiene un defecto importante: no hay eventos de escucha o devolución de llamada para abrir o cerrar la ventana emergente o el cuadro de diálogo. Por ejemplo, parece imposible cambiar el encabezado giratorio basado en una ventana emergente abierta o cerrada (tal vez cambiar una flecha o algo así). – Batdude