Java ListView项目ID始终为0

Java ListView项目ID始终为0,java,android,listview,android-cursoradapter,Java,Android,Listview,Android Cursoradapter,setOnItemClickListener的id参数返回的值始终为0,无论单击哪个位置,返回的值始终为0 但是position of correct的值,我也尝试过adapterView.getItemIdAtPositioni,但单击列表中的每个项目时的值仍然是零 您正在执行新的ListAdaptergetActivity,null;这是一个自定义类,因为你不能用接口来实现。您是否更新了默认的getItemId方法?我不赌 在我看来,您的适配器需要类似于以下内容的实现: @Override

setOnItemClickListener的id参数返回的值始终为0,无论单击哪个位置,返回的值始终为0

但是position of correct的值,我也尝试过adapterView.getItemIdAtPositioni,但单击列表中的每个项目时的值仍然是零

您正在执行新的ListAdaptergetActivity,null;这是一个自定义类,因为你不能用接口来实现。您是否更新了默认的getItemId方法?我不赌

在我看来,您的适配器需要类似于以下内容的实现:

@Override
public long getItemId(int position) {
    long result = 0;
    if (mCursor.moveToPosition(position)) {
        Log.d("SO", DatabaseUtils.dumpCurrentRowToString(mCursor);
        result = mCursor.getLong(mCursor.getColumnIndex(TableName.table1.mId));
    }
    return result;
}

如果无法解决此问题,请使用

查看游标中的数据本身,因为ContentProvider为_id列返回0。。。或者在适配器实现中重写getItemId。。。但这只是一个瞎猜,因为您没有提供最重要的代码…是的,您正在按照我的预期扩展游标适配器,所以这应该可以工作,只需将该方法添加到ListAdapter中,将一个具体类命名为与接口相同是个坏主意。顺便说一句,IDE应该警告您没有解决此错误,但返回的值为零。您是否确保TableName.table1.mId是正确的列,并注销getLong返回的内容,moveToPosition是否成功?如果它确实调用getLong ie moveToPosition成功,并且返回0,那么问题出在数据中。试试我刚才添加的日志,看看你有什么
public class ListAdapter extends CursorAdapter{


public ListAdapter(Context context, Cursor c) {
    super(context, c);
}


@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    View v = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false);
    return v;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView name,price;
    name = (TextView)view.findViewById(R.id.itemName);
    price = (TextView)view.findViewById(R.id.itemPrice);
    name.setText(cursor.getString(cursor.getColumnIndex(TableName.table1.mName)));
    price.setText(String.valueOf(cursor.getInt(cursor.getColumnIndex(TableName.table1.mPrice))));
}
}
@Override
public long getItemId(int position) {
    long result = 0;
    if (mCursor.moveToPosition(position)) {
        Log.d("SO", DatabaseUtils.dumpCurrentRowToString(mCursor);
        result = mCursor.getLong(mCursor.getColumnIndex(TableName.table1.mId));
    }
    return result;
}