3

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

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

                    }   

它几乎工作正常,项目正在删除,但有些项目即使检查也不会被删除......如果有人可以帮助我......提前致谢

4

5 回答 5

1

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

例子:

您的适配器中有 3 个元素,并且想要删除所有(1、、、23

卸下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();           
}
于 2012-06-14T06:32:33.483 回答
1
ArrayAdapter<String> adptr= new ArrayAdapter<String>(getActivity(),R.layout.custom_spinner_text,list)
String delete =adptr.getItem(0));
adptr.remove(delete);
于 2012-06-14T07:30:15.617 回答
0

试试下面的代码

 for(int i=0;i<feedbackList.size();i++)
        {
            if(checks.get(i) == true)
            {
                feedbackList.remove(i);
                checks.remove(i);
                i--;
            }
        }


adapter.notifyDataSetChanged();  

并使用 feedbackList 和检查作为类级别的变量

于 2012-06-14T06:46:21.113 回答
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();                                                 
                        }

                    }
于 2012-06-14T06:43:00.787 回答
0

你可能需要更新你的观察者

for(DataSetObserver observer : observers) {
        observer.onChanged();
    }
于 2014-09-25T19:28:33.187 回答