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

結果は

USA->値は「USA」です

フランス->値は「フランス」

コードlabels.add(cursor.getString(1));をに変更するとlabels.add(cursor.getString(0));

結果は

1->値は「1」

2->値は「2」です

試してみましint position2 = spin2.getSelectedItemPosition()+1;たが、値はデータベースのIDではなく、スピナーのID/位置です。

スピナーにフィールド名を表示する方法。しかし、値は名前のIDです

例:スピナーディスプレイ:

USA->値は「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 に答える