gpt4 book ai didi

android - 使用文本和值从 Spinner sqlite 加载

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:30 25 4
gpt4 key购买 nike

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

亚历克斯

最佳答案

这真的很简单,你可以做的就是用一个类来实现/代表你需要的东西,方法如下:

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

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

关于android - 使用文本和值从 Spinner sqlite 加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14331175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com