Gen*_*ari 37 android listview simplecursoradapter
我是Android开发的新手......来自iPhone和.Net背景.我见过与此问题非常相似的问题,但没有一个问题涉及SimpleCursorAdapter.
我有一个基本的ListActivity,它使用Cursor将SQLite查询中的数据绑定到我的ListView:
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
c,
new String[] {"name"},
new int[] {android.R.id.text1});
setListAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
然后单击某个项目时:
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Difference between this:
Cursor c = (cursor)l.getItemAtPosition(position);
//and this??
Cursor c = (Cursor)l.getAdapter().getItem(position);
int categoryId = c.getInt(0);
}
Run Code Online (Sandbox Code Playgroud)
这是获取所选元素的id的正确方法吗?这看起来很奇怪,因为我不认为我可以在数据库关闭后使用我的光标(这是在我绑定之后).当我无法找到从该ID中获取实际项目的方法时,传入ID的重点是什么?另外,我不明白为什么getItemAtPosition()会返回一个游标......游标被绑定到整个列表; 不只是一排.最后,如果这是正确的,获得光标的两种方式之间是否存在差异?谢谢.
Fem*_*emi 82
所以有几点:在你拿到光标之后,你想要打电话startManagingCursor.这将光标的生命周期与Activity的生命周期联系起来(因此当Activity被销毁时,光标会被关闭/清理).
startManagingCursor(c);
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
c,
new String[] {"name"},
new int[] {android.R.id.text1});
setListAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
此外,数据库未关闭,Cursor通常保持与DB的实时连接(因此ListView可以滚动并执行那些可能需要将来访问Cursor内容的事情.
对于您的核心问题,最简单的方法onListItemClick是:
Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
c.moveToPosition(position);
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用它c.getLong(0)来获取id(假设您将id列作为第一列获取,通常就是这种情况).但是,请注意,id作为签名的一部分传入(请参阅最后一个参数public void onListItemClick(ListView l, View v, int position, long id)),因此您实际上不需要再次获取它(但如果您想要刻录循环,当然可以).要访问其他列,您可以执行相同的操作,只需更改列索引即可.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
36746 次 |
| 最近记录: |