2013-01-15 10 views
8

我有一個微調器加載數據到sqlite從文本和值從旋轉器sqlite加載

我有數據庫中的字段ID和字段名稱。

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

,其結果是

USA - >值是 「USA」

法國 - >值是 「法國」

當我改變代碼labels.add(cursor.getString(1));labels.add(cursor.getString(0));

,結果是

1 - > val UE是 「1」

2 - >值是 「2」

我嘗試與int position2 = spin2.getSelectedItemPosition()+1;但該值是ID /旋轉器的位置,數據庫的不是ID。

如何在微調器上顯示字段名稱。但該值是名稱的ID

示例:微調顯示:

USA - >值是 「1」

法國 - >值是 「2」

BR

亞歷克斯

回答

24

這真的很簡單,你可以做的是按照以下方式實現/代表你需要的類:

創建以下類: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; 
    } 

} 

使用這個類,你仍然可以使用Android實現一個ArrayAdapter的(沒有必要實現自己,因爲的toString方法提供的字符串值你想要顯示,並且你仍然存儲你也需要的數據庫ID)。

現在,你必須創建您的列表如下:

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

現在,你有價值觀和IDS的對象列表,您加載微調是這樣的:

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

微調者將顯示這些值,同時也從數據庫中獲得它們的ID。

爲了獲取當前選定項的id,你這樣做:

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

請您嘗試一下,讓我知道會發生什麼。

+0

當我看到這個[http:// stackoverflow。COM /問題/ 5424841 /最新最正確的路到執行鍵 - 值對,在微調功能於機器人。我嘗試了兩種方法,用你的代碼和'SimpleCursorAdapter'並且它可以工作。感謝您的幫助 @Leeeeeeelo –

+2

好帖子!儘管'cursor.getString(0)'語句可能應該是'cursor.getInt(0)'。 – dana

+0

嗨,大家好,我是Android新手,真的有相同的要求,嘗試你提出的解決方案,但無法通過它。你可以請發佈一個工作示例項目。請致電 – sjpatel