Search code examples
androiddatabasecursorspinnersimplecursoradapter

Populate spinner with different cursors


I have a spinner that I populate with a cursor from database sqlite column, this works OK, but isn't ideal. I added another spinner to select a column and show it in spinner, but this is my problem when I build the adapter. This is my code:

    cursor = myDB.obtenerColumna(getBaseContext(),elemento);   
    String[] columns = new String[] { "_id", "columna", "columnb", "columnc", "columnd" };
    menudesplegable.setPrompt(getText(R.string.seleccionaEtiqueta)); 

   SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_spinner_item,cursor,
            columns, new int[] {android.R.id.text1});    

    adapter.setDropDownViewResource
            (android.R.layout.simple_spinner_dropdown_item);       

I get columns from database correctly, but if I pass a cursor from other column the app fail building adapter. I try pass only name column in String[] but fail too.

Thanks.


Solution

  • I resolved this:

    /**
     * Crea el menú desplegable para seleccionar tiqueta.
     */
    public void construirMenuDesplegable(String elemento) {
        // get items of database using selected element in other spinner
        cursor = myDB.obtenerColumna(getBaseContext(), elemento);
        menudesplegable.setPrompt(getText(R.string.seleccionaEtiqueta));
    
        // Create adapter
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_spinner_item, cursor,
                new String[] { elemento }, new int[] { android.R.id.text1 });
    
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
        // Indicate adapter
        menudesplegable.setAdapter(adapter);
    
        try {
            myDB.close();
        } catch (Exception e) {
            Log.e("miError", "Error al cerrar db", e);
        }
    }
    
    /**
     * Build spinner for select a element for show in other spinner.
     */
    public void construirMenuDesplegable2() {
        // Create adapter
        ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
                this, R.array.listables, R.layout.custom_spinner);
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Indicate adapter
        menudesplegable2.setAdapter(adapter2);
    }