问题我有自定义列表适配器视图,带有复选框我想删除选中项目上的列表项。这是我的代码
for(int i=0;i<adapter.getCount();i++)
{
System.out.println("Adapter Count:"+adapter.getCount());
if(checks.get(i)==true)
{
checks.put(i,false);
adapter.remove(feedbackList.get(i));
adapter.notifyDataSetChanged();
}
}
它几乎正常工作,物品正在移除,但有些物品甚至不会被删除甚至检查......如果有人可以帮我... 提前致谢
答案 0 :(得分:1)
当你在迭代它时,你正在修改你的适配器。你应该找到一个更好的方法来做到这一点。
示例:
您的适配器中有3个元素,并希望删除所有元素(1
,2
,3
)。
删除1
后,您的适配器只剩下(2
,3
)。
您的计数器i
位于适配器的第二个字段上
因此,您删除3
并完成'for'。
2
不会被删除。
编辑(解决方案): 我没有验证它,但这应该工作:
LinkedList<Integer> list = new LinkedList<Integer>();
for(int i=0;i<adapter.getCount();i++)
{
System.out.println("Adapter Count:"+adapter.getCount());
if(checks.get(i)==true)
{
list.addFirst(i);
}
}
//list will now contain all positions of checked items (e.g. 1,5,7,8,9,..)
for(int i=0;i<list.length;i++)
{
//list.get(i) gets the index of the checked item
adapter.remove(feedbackList.get(list.get(i)));
adapter.notifyDataSetChanged();
}
答案 1 :(得分:1)
ArrayAdapter<String> adptr= new ArrayAdapter<String>(getActivity(),R.layout.custom_spinner_text,list)
String delete =adptr.getItem(0));
adptr.remove(delete);
答案 2 :(得分:0)
通过notifyDataSetChanged从方法和重新加载列表中删除数组项,方法:
for(int i=0;i<adapter.getCount();i++)
{
System.out.println("Adapter Count:"+adapter.getCount());
if(checks.get(i)==true)
{
checks.put(i,false);
//remove items from soruce
adapter.notifyDataSetChanged();
}
}
答案 3 :(得分:0)
尝试以下代码
for(int i=0;i<feedbackList.size();i++)
{
if(checks.get(i) == true)
{
feedbackList.remove(i);
checks.remove(i);
i--;
}
}
adapter.notifyDataSetChanged();
并使用feedbackList并检查为类级变量
答案 4 :(得分:0)
您可能需要更新观察员
for(DataSetObserver observer : observers) {
observer.onChanged();
}