从自定义列表适配器中删除项

时间:2012-06-14 06:26:43

标签: android listview

问题我有自定义列表适配器视图,带有复选框我想删除选中项目上的列表项。这是我的代码

                  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();                                                 
                        }

                    }   

它几乎正常工作,物品正在移除,但有些物品甚至不会被删除甚至检查......如果有人可以帮我... 提前致谢

5 个答案:

答案 0 :(得分:1)

当你在迭代它时,你正在修改你的适配器。你应该找到一个更好的方法来做到这一点。

示例:

您的适配器中有3个元素,并希望删除所有元素(123)。

删除1后,您的适配器只剩下(23)。

您的计数器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();
    }