加载从文本和价值的微调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; } 

结果是

美国 – >价值是“美国”

法国 – >价值是“法国”

当我更改代码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

亚历克斯

Solutions Collecting From Web of "加载从文本和价值的微调SQLite"

这很简单,你可以做的是按照以下方式实现/表示你需要的一个类:

创build以下类: 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方法提供了你想要显示的string值,而且你仍然存储你所需要的数据库ID)。

现在你将不得不创build你的列表如下:

 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(来自数据库)。

为了检索当前select的项目的ID,你这样做:

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

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