我已经生成了一份客户列表。单击此按钮将打开编辑视图以编辑客户。这里参数应该根据存储在数据库中的行的_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);
}
});
答案 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中的默认工具就是返回位置。