0

我已经生成了一个客户列表。单击此按钮应打开编辑视图以编辑客户。这里的参数应该根据存储在数据库中传递行的_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

4 回答 4

1

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

如果我没记错的话,该方法在适配器类中,方法名如下:

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

返回适当的 ID 将为您提供所需的结果。

于 2013-02-20T04:44:37.280 回答
0

我相信“长ID”不是记录ID,而是内部生成的视图ID。

如果您想返回数据源 ID,那么您需要使用 position 和类似的东西:

// 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);
于 2013-02-20T04:44:09.607 回答
0

替换idposition

采用

 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);
        }
    })
于 2013-02-20T04:56:46.090 回答
0

在我看来,通过位置,您可以使用适配器的getItem(位置)获取行项。因此,位置表示适配器中的数据位置。

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

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

于 2013-12-11T02:46:46.007 回答