我创建了一个包含表(类别)和列(_id、标题等)的数据库。我想从我的数据库中读取这些类别的数据并将它们列在 ListView
中。
这是我的代码:
public class MainActivity extends listActivity{
private ArrayAdapter arrayAdapter;
ArrayList results = new ArrayList();
ListView catlist;
Cursor cur;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
catlist = getListView();
int parentid = getIntent().getIntExtra("catid", 0);
openAndQueryDatabase(parentid);
displayCatListView();
}
private void displayCatListView() {
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, results));
catlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
final int position, long id) {
Toast.makeText(MainActivity.this,
"List View Clicked:" + position, Toast.LENGTH_LONG)
.show();
}
});
}
private void openAndQueryDatabase(int parentid) {
DataBaseHelper db = new DataBaseHelper(this);
SQLiteDatabase dbr = db.getReadableDatabase();
cur = dbr.rawQuery(
"SELECT _id, title, has_sub FROM categories where parent_id=?",
new String[] { String.valueOf(parentid) });
if (cur != null) {
while (cur.moveToNext()) {
int cat_id = cur.getInt(cur.getColumnIndex("_id"));
String cattitle = cur.getString(cur.getColumnIndex("title"));
int has_sub = cur.getInt(cur.getColumnIndex("has_sub"));
results.add(cat_id + cattitle + has_sub);
}
cur.close();
}
db.close();
}
}
- 我可以在 ItemClick 上获取项目的位置,但我想在 ItemClick 上获取其行的 _id。我该怎么做?
- 我是新手。我的代码有错误吗?
非常感谢。
最佳答案
改用 CursorAdapter( http://developer.android.com/reference/android/widget/CursorAdapter.html ),当您使用 ArrayAdapter 时,它会超出内存分配,而且如果 db 更改,您也不会收到通知。
此外,如果使用 CursorAdapter,您将拥有
public void onItemClick(AdapterView<?> parent, View v, final int position, long id)
“id”参数将与表的 _id 字段一致
得到整行就可以了
adapter.getItem(int position)
关于android - 如何获取 ListView 的项目 onItemClick 的光标值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17632726/