Android OnItemClickListener long id参数未给出字段ID

时间:2013-02-20 04:34:54

标签: android sqlite listview

我已经生成了一份客户列表。单击此按钮将打开编辑视图以编辑客户。这里参数应该根据存储在数据库中的行的_id传递。但每次都在列表中传递它的位置。因此编辑视图打开了错误的数据。请帮忙。

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + id);
            customerEdit(customerEditUri);
        }
    });

答案: 谢谢你们。你的评论帮我解决了这个问题。我在CustomerObject类中创建了以下函数:

@Override
    public String toString() {
        return this.name;
    }

之后在活动中创建了一个CustomerObject数组,如下所示:

List<CustomerObject> customers = new ArrayList<CustomerObject>();

通过以下方式创建ArrayAdapter:

adapter = new ArrayAdapter<CustomerObject>(this, R.layout.list, R.id.customer_name, customers);

最后调用setOnItemClickListener(),如下所示:

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            CustomerObject custObj = adapter.getItem(position);
            Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + custObj.pkid);
            customerEdit(customerEditUri);
        }
    });

4 个答案:

答案 0 :(得分:1)

您必须在适配器中设置您希望它返回的ID,即用于将数据绑定到ListView的列表视图适配器。

如果我没有错,该方法在适配器类中使用以下方法名称:

public long getItemId(int position) {
  return myitem[position].getId();
}

返回适当的ID可以获得您想要的结果。

答案 1 :(得分:0)

我认为“long id”不是记录ID,而是内部生成的视图id。

如果你想回到数据源id,那么你需要使用位置和类似的东西:

// Assuming datasource is an ArrayAdapter<Customer>
Customer customer = customerAdapter.getItemAtPosition(position);

// then you can do
Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + customer.getId());
customerEdit(customerEditUri);

答案 2 :(得分:0)

id替换为position

使用

 lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            Uri customerEditUri = Uri.parse(CustomerBean.CONTENT_URI + "/" + position);
            customerEdit(customerEditUri);
        }
    })

答案 3 :(得分:0)

在我看来,通过这个位置,你可以获得带有适配器的getItem(位置)的行项。 因此,该位置表示适配器中的数据位置。

对于id参数,我认为这是一个帮助方法,如你所知,适配器中的数据总是一个记录器。一般来说,记录器应该有一个id列(类似于数据库id)。在编码时,您可以通过位置获取项目,然后获取项目的ID(如果项目具有id)。但你可以直接用“id”参数得到这样的“id”。

顺便说一句,如果你想使用id参数,你必须在适配器中实现getItemId()方法。 ArrayAdapter中的默认工具就是返回位置。