¿Cómo recuperar un ID del elemento seleccionado en un Spinner dinámico?
Tengo un hilandero que se puebla con los objetos de la Category
que se recuperan de la db. La tabla Categorías tiene columnas _id
y category_name
. Quiero mostrar el nombre de la categoría en la ruleta, pero cuando el usuario selecciona un elemento, lo necesito para recuperar el ID del elemento seleccionado. He intentado lo siguiente:
Declaración de variables (en el nivel de clase):
- Java.lang.OutOfMemoryError en almacenar imágenes en sqlite db
- ¿Cómo obtener eventos en las últimas 24 horas con SQLite?
- Android Studio vs idioma ruso
- Utilizando un botón para exportar sqlite db a un archivo excel-readable (quizás csv)?
- Compruebe si el cursor tiene resultados
int currCategoryId; ArrayAdapter<String> adapter; NotesManager manager = new NotesManager(this); ArrayList<Category> arrListCategories; ArrayList<String> arrListCategoriesString = new ArrayList<String>(); Spinner spCategories;
Instanciándolos en el método onCreate
:
manager.getAllCategories(); arrListCategories = manager.getAllCategories(); for (int i = 0; i < arrListCategories.size(); i++) { Category currCategory = arrListCategories.get(i); arrListCategoriesString.add(currCategory.getCategory_name().toString()); } adapter=new ArrayAdapter<String> (this, android.R.layout.simple_spinner_item, arrListCategoriesString); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spCategories.setAdapter(adapter); spCategories.setOnItemSelectedListener(spinnerListener);
Y este es el spinnerListener que intenté:
OnItemSelectedListener spinnerListener = new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // An item was selected. //currCategory = (String) parent.getItemAtPosition(pos).toString(); //selectedCategory = Category selectedCategory = (Category)spCategories.getItemAtPosition(pos); currCategoryId = selectedCategory.getId(); } public void onNothingSelected(AdapterView<?> arg0) { } };
Pero en este caso la aplicación se bloquea y estoy recibiendo un "
No se puede emitir cadena a Categoría "en esta línea:
Category selectedCategory = (Category)spCategories.getItemAtPosition(pos);
También he intentado esto:
currCategoryId = view.getId();
Pero entonces, en lugar de 1 o 2 (dependiendo de qué categoría he seleccionado, actualmente tengo 2 de ellos), estoy recibiendo un número muy largo …
¿Cómo puedo arreglarlo? ¿Cómo puedo recuperar el ID del objeto seleccionado?
- Abra cualquier SQLiteDatabase como su / root
- Uso de la base de datos existente en Android Wear
- Android sqlite insert no está insertando
- Base de datos en el estudio android
- Cómo escapar caracteres especiales como 'en sqlite en android
- Cómo puedo limitar el número de filas en la tabla SQLite de Android
- Insertar datos JSON en la base de datos SQLite en android
- Código de error SQLite 17
No puede utilizar el ArrayAdapter
todos modos porque es sólo para cadenas (no categorías). Por lo tanto, por qué está recibiendo una excepción de casting. Puesto que usted tiene su Category ArrayList
y su String ArrayList
(que se utiliza para el ArrayAdapter
) en el mismo orden, sólo use
Category selectedCategory = arrListCategories.get(pos);
En su método onItemSelected()
Utilizaría un SimpleCursorAdapter
porque almacena varias columnas, en vez de un ArrayAdapter
que almacena solamente uno.
Primero cambie NotesManager.getAllCategories()
para devolver un Cursor
que utilice:
"SELECT _id, category_name FROM Table;"
Puede ordenar los resultados en orden alfabético si lo desea:
"SELECT _id, category_name FROM Table ORDER BY category_name;"
Luego vincule este Cursor
directamente a su Spinner:
Cursor cursor = manager.getAllCategories(); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, new String[] {"category_name"}, new int[] {android.R.id.text1}); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spCategories.setAdapter(adapter);
Finalmente en su OnItemSelectedListener
todo está listo y esperando:
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // The parameter id already refers to your Category table's id column, }
No hay llamadas extra get()
o convertir los cursores en listas necesarias!
- Cómo borrar la selección en un EditText?
- Android: compilación de 9 archivos de parche para ser utilizado fuera de la carpeta de dibujo?