【发布时间】:2012-01-30 12:56:15
【问题描述】:
我在使用 Android Spinner 时遇到问题。在我的应用程序中,我在主布局上创建了两个 Spinner。 “州”微调器和“区”微调器。 Spinner 上的所有数据都存储在 SQLite 数据库中。我想根据第一个微调器中特定“状态”的选择在第二个微调器上显示“区”列表。 示例:假设当我在第一个微调器中选择卡纳塔克邦时,应用程序首先从 SQLite 数据库中检索与卡纳塔克邦相关的所有地区,然后显示在第二个微调器上。
为此,我正确执行所有数据库活动意味着创建两个表“州”和“区”,其中区表中的一列是外键,它被引用到“州表”的主键之一
db.execSQL("create table "+STATE_TABLE+" ("+
STATE_ID+" integer primary key autoincrement not null, "+
STATE_NAME+" text"+")");
db.execSQL("create table "+DISTRICT_TABLE+" ("+DISTRICT_ID+
" integer primary key autoincrement not null,"+DISTRICT_NAME
+" text,"+STATE_ID+" integer, FOREIGN KEY("
+STATE_ID+") REFERENCES "+STATE_TABLE
+"("+STATE_ID+")"+")");
现在在 Activity 类中:
spinnerState = (Spinner)findViewById(R.id.spinner1);
spinnerDistrict = (Spinner)findViewById(R.id.spinner2);
stateList = new ArrayList<String>();
districtList = new ArrayList<String>();
假设所有数据都准备好存储在数据库中。
现在我需要从数据库中检索所有“状态”数据并将其添加到状态列表中,即 ArrayList。
Cursor stateCursor = database.query(STATE_TABLE, new String[]{STATE_ID, STATE_NAME},
null, null, null, null, STATE_NAME);
stateCursor.moveToFirst();
if(! stateCursor.isAfterLast()){
do{
int id = stateCursor.getInt(0);
String stateName = stateCursor.getString(1);
stateList.add(stateName);
}while(stateCursor.moveToNext());
}
stateCursor.close();
在此之后我创建一个 ArrayAdapter 并将这个状态列表放入其中。
spinnerState.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, stateList));
接下来我将以下代码放入活动类中:
spinnerState.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View v,
int pos, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
现在我的问题来了:
- 我如何获取 StateId 以执行选择查询以获取数据库中与特定州相关的所有地区。
- 适配器将如何为 District 生成。
- 我将所有这些代码放在哪里。
从状态 Spinner 获取值后,我需要创建 DistrictList。
在本网站前面提出的类似问题,他们做了什么: 他们已经为两个微调器创建了两个适配器,然后应用 setOnItemSelectedListener。 请帮助我,因为在这里我的思想完全停止工作。 我参考了很多书籍和网站,但他们甚至没有提到这类问题。
【问题讨论】:
标签: android database spinner adapter