使用文本和值从spinner sqlite加载

我有一个spinner加载数据到sqlite

我在数据库中有字段ID和字段名称。

private void loadSpinnerDataHama() { // database handler DatabaseSpinner db = new DatabaseSpinner(getApplicationContext()); // Spinner Drop down elements List lables = db.getAllLabels(); // Creating adapter for spinner ArrayAdapter dataAdapter = new ArrayAdapter(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 getAllLabels(){ List labels = new ArrayList(); // 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)); to labels.add(cursor.getString(0));

结果是

1 – >值为“1”

2 – >值为“2”

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

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

示例:微调器显示:

美国 – >价值是“1”

法国 – >价值是“2”

BR

亚历克斯

它非常简单,您可以通过以下方式实现/表示类所需的内容:

创建以下类: 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  lables = db.getAllLabels(); // Creating adapter for spinner ArrayAdapter dataAdapter = new ArrayAdapter(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 () ); 

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