我有一个listview,其中包含一些保存在数据库中的元素,我使用自定义内容提供程序访问它们。
在我的主要活动中,我实现了一个ResourceCursorAdapter。
我需要的是,当我点击列表中的元素时,光标必须访问此项的参数并将它们发送到另一个活动。我差不多已经完成了,但我认为我没有把光标放在正确位置。如果我必须使用ID访问数据库中的项目,或者使用该位置就足够了,我不知道如何做到这一点。
protected void onListItemClick(ListView l, View v, int position, long id) {
Cursor cursor = getContentResolver().query(TravelsProvider.CONTENT_URI, null, null, null, null);
while(cursor.moveToPosition(position)) {
Intent intent = new Intent(this, TravelActivity.class);
intent.putExtra(TravelActivity.EXTRA_CITY, cursor.getString(cursor.getColumnIndex(Travels.CITY)));
intent.putExtra(TravelActivity.EXTRA_COUNTRY, cursor.getString(cursor.getColumnIndex(Travels.COUNTRY)));
intent.putExtra(TravelActivity.EXTRA_YEAR, cursor.getInt(cursor.getColumnIndex(Travels.YEAR)));
intent.putExtra(TravelActivity.EXTRA_NOTE, cursor.getString(cursor.getColumnIndex(Travels.NOTE)));
cursor.close();
startActivity(intent);
super.onListItemClick(l, v, position, id);
}
}
更新
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor cursor = ((CursorAdapter)l.getAdapter()).getCursor();
cursor.moveToPosition(position);
Intent intent = new Intent(this, TravelActivity.class);
intent.putExtra(TravelActivity.EXTRA_CITY, cursor.getString(cursor.getColumnIndex(Travels.CITY)));
intent.putExtra(TravelActivity.EXTRA_COUNTRY, cursor.getString(cursor.getColumnIndex(Travels.COUNTRY)));
intent.putExtra(TravelActivity.EXTRA_YEAR, cursor.getInt(cursor.getColumnIndex(Travels.YEAR)));
intent.putExtra(TravelActivity.EXTRA_NOTE, cursor.getString(cursor.getColumnIndex(Travels.NOTE)));
startActivity(intent);
cursor.close();
}
}
另外,这是我的onCreate方法:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getTravelsAdapter();
//...
}
public void getTravelsAdapter() {
Cursor c = getContentResolver().query(TravelsProvider.CONTENT_URI, PROJECTION, null, null, null);
mAdapter = new TravelsCursorAdapter(this, c);
setListAdapter(mAdapter);
}
答案 0 :(得分:3)
你应该能够通过
获得适配器l.getAdapter()
并将返回的值安全地转换为ResourceCursorAdapter
的实现。您可以在前一次调用的返回值上使用getCursor
,然后获取光标。
获得光标后,您可以使用Cursor.moveToPosition(position);
移动到位置并检索数据
示例:
Cursor cursor = ((TravelsCursorAdapter)l.getAdapter()).getCursor();
cursor.moveToPosition(position);