listview cursor在itemclick上获取项目

时间:2014-01-14 15:19:38

标签: android listview cursor android-cursoradapter

我有一个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);
}

1 个答案:

答案 0 :(得分:3)

你应该能够通过

获得适配器
l.getAdapter()

并将返回的值安全地转换为ResourceCursorAdapter的实现。您可以在前一次调用的返回值上使用getCursor,然后获取光标。 获得光标后,您可以使用Cursor.moveToPosition(position);移动到位置并检索数据

示例:

Cursor cursor = ((TravelsCursorAdapter)l.getAdapter()).getCursor();
cursor.moveToPosition(position);