2013-01-15 3 views
8

Ho un filatore dati di carico per SQLitecarico dal filatore SQLite con il testo e il valore

ho campo id e il nome del campo nel database.

private void loadSpinnerDataHama() { 
     // database handler 
     DatabaseSpinner db = new DatabaseSpinner(getApplicationContext()); 
     // Spinner Drop down elements 
     List<String> lables = db.getAllLabels(); 
     // Creating adapter for spinner 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_spinner_item, lables); 
     // Drop down layout style - list view with radio button 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     // attaching data adapter to spinner 
     spin2.setAdapter(dataAdapter); 
    } 

    public List<String> getAllLabels(){ 
    List<String> labels = new ArrayList<String>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_LABELS; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      labels.add(cursor.getString(1)); 
     } while (cursor.moveToNext()); 
    } 

    // closing connection 
    cursor.close(); 
    db.close(); 

    // returning lables 
    return labels; 
} 

e il risultato è

Stati Uniti d'America -> valore è "USA"

France -> il valore è "Francia"

quando cambio il codice labels.add(cursor.getString(1));-labels.add(cursor.getString(0));

e il risultato è

1 -> val ue è "1"

2 -> valore è "2"

provo con int position2 = spin2.getSelectedItemPosition()+1; ma il valore è id/posizione del filatore, non l'ID di database.

come visualizzare il nome del campo sulla casella di selezione. ma il valore è id di nome

Esempio: Il display filatore:

Stati Uniti d'America -> valore è "1"

France -> valore è "2"

BR

Alex

risposta

24

È davvero semplice, quello che puoi fare è implementare/rappresentare ciò che ti serve in una classe, nel modo seguente:

Creare la seguente classe: SpinnerObject

public class SpinnerObject { 

    private int databaseId; 
    private String databaseValue; 

    public SpinnerObject (int databaseId , String databaseValue) { 
     this.databaseId = databaseId; 
     this.databaseValue = databaseValue; 
    } 

    public int getId() { 
     return databaseId; 
    } 

    public String getValue() { 
     return databaseValue; 
    } 

    @Override 
    public String toString() { 
     return databaseValue; 
    } 

} 

Utilizzando questa classe, è comunque possibile utilizzare l'applicazione Android del ArrayAdapter (non è necessario implementare il proprio, in quanto il metodo toString fornisce il valore della stringa che si desidera visualizzare e si memorizza ancora l'ID del database di cui si ha bisogno anche).

Ora dovrete creare la vostra lista come segue:

public List < SpinnerObject> getAllLabels(){ 
    List <SpinnerObject> labels = new ArrayList <SpinnerObject>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_LABELS; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      labels.add (new SpinnerObject (cursor.getString(0) , cursor.getString(1))); 
     } while (cursor.moveToNext()); 
    } 

    // closing connection 
    cursor.close(); 
    db.close(); 

    // returning labels 
    return labels; 
} 

Ora che avete la lista di oggetti con i valori e gli ID, si carica il filatore in questo modo:

private void loadSpinnerDataHama() { 
    // database handler 
    DatabaseSpinner db = new DatabaseSpinner(getApplicationContext()); 
    // Spinner Drop down elements 
    List <SpinnerObject> lables = db.getAllLabels(); 
    // Creating adapter for spinner 
    ArrayAdapter<SpinnerObject> dataAdapter = new ArrayAdapter<SpinnerObject>(this, 
    android.R.layout.simple_spinner_item, lables); 
    // Drop down layout style - list view with radio button 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    // attaching data adapter to spinner 
    spin2.setAdapter(dataAdapter); 
} 

E lo spinner mostrerà i valori, pur avendo i loro id (anche dal database).

Al fine di recuperare l'id della voce attualmente selezionata, si esegue questa operazione:

int databaseId = Integer.parseInt (((SpinnerObject) spin2.getSelectedItem()).getId()); 

Si prega di provare e fatemi sapere cosa succede.

+0

stesso algoritmo quando vedo questo [http: // stackoverflow.com/domande/5424841/cosa-il-corretto-modo da implementare-valore-chiave-pair-in-filatore-in-Android]. provo con due metodi, con il tuo codice e con 'SimpleCursorAdapter' e funziona. grazie per il tuo aiuto @Leeeeeeelo –

+2

Buon post! L'istruzione 'cursor.getString (0)' dovrebbe probabilmente essere 'cursor.getInt (0)' comunque. – dana

+0

Hey ragazzi Sono nuovo ad Android, e ho davvero lo stesso requisito e sto provando la soluzione che hai proposto, ma non riesco a superarlo. Potete per favore pubblicare un progetto di esempio di lavoro per questo. Si prega di – sjpatel