2013-01-15 12 views
8

Ich habe eine Spinner Last Daten zu SQLiteLaden von Spinner sqlite mit Text und Wert

Ich habe Feld-ID und Feldname in der Datenbank.

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; 
} 

und das Ergebnis ist

USA -> Wert "USA"

Frankreich -> Wert "Frankreich"

, wenn ich den Code labels.add(cursor.getString(1));-labels.add(cursor.getString(0)); ändern

und das Ergebnis ist

1 -> val ue "1"

2 -> Wert "2"

ich versuche, mit int position2 = spin2.getSelectedItemPosition()+1; aber der Wert ist id/Position der Spinner, nicht die ID der Datenbank.

wie Feldname auf Spinner anzeigen. aber der Wert ist id Namens

Beispiel: Die Spinner-Display:

USA -> Wert "1"

Frankreich -> Wert "2"

BR

Alex

Antwort

24

Es ist wirklich einfach, was Sie tun können ist zu implementieren, was Sie von einer Klasse benötigen, auf folgende Weise:

Erstellen Sie die folgende Klasse: 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; 
    } 

} 

diese Klasse verwenden, können Sie immer noch die Android-Implementierung des ArrayAdapter verwenden (keine Notwendigkeit, Ihre eigenen zu implementieren, da die toString Methode den String-Wert liefert die Sie anzeigen möchten, und Sie speichern weiterhin die Datenbank-ID, die Sie auch benötigen).

Jetzt müssen Sie Ihre Liste erstellen, wie folgt:

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; 
} 

Nachdem Sie nun die Liste der Objekte mit den Werten und ids haben, laden Sie den Spinner auf diese Weise:

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); 
} 

Und der Spinner zeigt die Werte an, während sie ihre IDs haben (aus der Datenbank).

Um die ID des aktuell ausgewählten Element abzurufen, können Sie dies tun:

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

Bitte versuchen Sie es und lassen Sie mich wissen, was passiert.

+0

gleichen Algorithmus, wenn ich dies [http: // stackoverflow.com/questions/5424841/whats-the-correct-weg-zu-implementieren-schlüssel-wert-paar-in-spinner-in-android]. Ich versuche mit zwei Methoden, mit Ihrem Code und mit 'SimpleCursorAdapter' und es funktioniert. Danke für Ihre Hilfe @Leeeeeeelo –

+2

Guter Beitrag! Die Anweisung 'cursor.getString (0)' sollte jedoch 'cursor.getInt (0)' sein. – dana

+0

Hey Leute, ich bin neu in Android, und habe wirklich die gleiche Anforderung und versuchen Sie die Lösung, die Sie vorgeschlagen, aber nicht durchkommen. Können Sie hierzu bitte ein funktionierendes Beispielprojekt posten? Bitte – sjpatel

Verwandte Themen