spYear = (Spinner) findViewById(R.id.spYear);
// 删除临时表
db.execSQL("drop table if exists t;");
// 取得年份唯一值,并插入到临时表中(直接使用 select distinct 返回的结果集没有 _id 列,无法作为 Spinner 的数据源)
db.execSQL("create temporary table t as select distinct strftime('%Y', date) as year from zhangmu where pay < 0;");
// 表尾加入一个空字符串,在 Spinner 中用来显示所有记录
db.execSQL("insert into t (year) values ('');");
// 使用 rowid 作为 _id 列
Cursor cYear = db.rawQuery("select rowid as _id, year from t order by year;", null);
SimpleCursorAdapter adpYear = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_dropdown_item,
cYear, new String[]{"year"}, new int[]{android.R.id.text1}, 0);
spYear.setAdapter(adpYear);
private boolean bReady = false;
spYear.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (bReady) {
Cursor cTmp = (Cursor) spYear.getSelectedItem();
ShowPayout(cTmp.getString(cTmp.getColumnIndex("year")));
// 马上关闭游标会引发异常
//cTmp.close();
} else {
// activity 初始化时会默认选择第一项并触发 onItemSelected 事件
// 使用标志变量 bReady 避免初始化未完成时触发 onItemSelected 事件而引发异常
view.setVisibility(View.INVISIBLE);
bReady = true;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//Log.i("infoo", "NOTHING");
}
});