我的列表视图中有ArrayList<Color> colorList
ArrayAdapter
。我的POJO是这样的:
public class Color {
int id;
String name;
//getter setter
}
从服务器获取所有内容。所以每个颜色对象的id
将匹配数据库表中的id
。
在我的ArrayAdapter's
getView
我正在使用数据库中的id
设置标记。
holder.imageButton.setTag(item.getId()); //color id from database
holder.imageButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int id = (Integer) v.getTag();
new DeleteColor(id).execute();
}
});
在上面的代码中,我将点击的项目id
发送到服务器进行删除
从listView中删除项目的简便方法是什么?
我现在正在做的是:
class DeleteColor extends AsyncTask<String, String, String> {
int id;
public DeleteColor (int id) {
this.id = id;
}
@Override
protected String doInBackground (String ... args) {
MyManager.INSTANCE.getService().deleteColor(id, new Callback<Integer>() {
@Override
public void success(Integer id, Response response) {
//loop through the colorlist to find which one to remove
for (int i = 0; i < colorList.size(); i++) {
Color c = colorList.get(i);
if (c.getId() == id) {
colorList.remove(c);
adapter.notifyDataSetChanged();
break;
}
}
}
@Override
public void failure(RetrofitError retrofitError) {
}
});
return "";
}
}
正如您所看到的,我正在遍历整个colorList
以查找具有我想删除的id
然后删除它的那个。这是实现这一目标的好方法吗?
问题
如何避免遍历整个colorList
以找到需要删除的内容。
答案 0 :(得分:3)
您拥有要从列表中删除的对象的ID。
使用该id获取对象,然后使用ArrayList方法indexOf(Object object)
查找列表中对象的索引并将其删除。
答案 1 :(得分:1)
技术上无法直接访问列表中的项目 在学校里,我们自己用Java建立了一个列表,它由不同的条目组成,这些条目是相互连接的。但第一个只连接到第二个,而第二个只连接到第三个。所以你甚至无法访问第二位的对象,而不是从顶部开始。要访问任何必须迭代列表的内容。
我刚刚阅读了Sound Conception的答案,我很确定indexOf(Object)
- 方法本身会遍历整个列表(除非Java开发人员做了一些魔法,实际上可能是。)我不是一个专业人士,并没有调查该方法的代码)。但是手动循环可能是最有效的方式。
我不认为,执行时间存在实际差异。因此,您可能希望使用Sound Conception的方法来保持代码简单。这完全取决于你!
答案 2 :(得分:0)
如果您在视图中将项目位置设置为标记,则还有另一种方法.....
然后v.getId()会给你点击的位置,你可以直接从你的列表中删除arraylist.remove(positionclicked);