8

我有一个微调器将数据加载到 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;
}

结果是

美国 -> 值为“美国”

法国 -> 值为“法国”

当我将代码更改labels.add(cursor.getString(1));labels.add(cursor.getString(0));

结果是

1 -> 值为“1”

2 -> 值为“2”

我尝试使用,int position2 = spin2.getSelectedItemPosition()+1;但值是微调器的 id/位置,而不是数据库的 id。

如何在微调器上显示字段名称。但值是名称的 id

示例:微调器显示:

美国 -> 值为“1”

法国 -> 值为“2”

BR

亚历克斯

4

1 回答 1

23

这真的很简单,您可以通过以下方式实现/表示您需要的类:

创建以下类: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;
    }

}

使用这个类,您仍然可以使用 ArrayAdapter 的 Android 实现(无需实现您自己的,因为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;
}

现在您已经有了包含值和 id 的对象列表,您可以通过以下方式加载微调器:

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

请尝试一下,让我知道会发生什么。

于 2013-01-15T08:14:15.397 回答