无法从游标适配器获取数据

时间:2013-10-06 15:25:27

标签: android sqlite android-listview cursor android-cursoradapter

我有一个ListView(在Activity而不在ListActivity中),它利用自定义游标适配器从我的本地数据库中获取一些数据并在{{ListView内显示1}}。

lv.setOnItemClickListener(new OnItemClickListener()
{
   @Override
   public void onItemClick(AdapterView<?> arg0, View view, int position, long id)
      {
            Log.i(tag, "position = " + position);
        Log.i(tag, "id is : " + id));
      }
});

假设我的数据库列如下:

  

id,name,surname,dob,height,gender,placeOfBirth,maritalStatus。

但是,我在listview(row.xml)中只显示名称和姓氏。 但是,每当用户点击列表中的某一行时,我也想检索其余的数据,例如,点击该行的ID或性别。

问题是,我没有显示列表中db行的所有信息,但是,当用户按下列表时,我需要检索该列表的一些数据。我怎么能在这里做到这一点?

以下方法不起作用,因为我不在ListActivity中,只有Activity。

public void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position,  id);

Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
c.moveToPosition(position);
//get the data...
}

2 个答案:

答案 0 :(得分:4)

arg0 中的OnItemClickListener参数 ListView。但是,你可以做到

lv.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
            // This will get the cursor from the adapter, already moved to position
            Cursor cursor = (Cursor) mCursorAdapter.getItem(position)
            //get the data...
      }
});

答案 1 :(得分:-1)

getView方法中你应该使用类似这样的东西

view.setTag(data); // you can pass here your specific data for each item

假设您的数据只是一个整数,那么您可以通过这种方式从onItemClick()获取此值:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Integer data = (Integer) view.getTag();
    // your operation
}