android listview 获取选中项的问题

我现在想将选中项存入一个ArrayList数组中,但是再次点击选中项是取消选择,ArrayList数组却将这个选项第二次存入。如何判断“选中的item”,再次点击是取消该... 我现在想将选中项存入一个ArrayList数组中,但是再次点击选中项是取消选择,ArrayList数组却将这个选项第二次存入。如何判断“选中的item”,再次点击是取消该选项呢
List<Integer> checkedID = new ArrayList<Integer>();
listView = (ListView) findViewById(R.id.listView1);
ArrayAdapter< String> adapter = new ArrayAdapter< String>(this, android.R.layout.simple_list_item_checked,getData());

listView.setAdapter(adapter);
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

listView.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int position,long id) {

checkedID.add(position); //这里添加选中项,但是再次点击选中项会再一次添加。

}
展开
 我来答
小谢005
2013-10-15 · 超过21用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:50.1万
展开全部
checkedID.add(position); //这里添加选中项,但是再次点击选中项会再一次添加。
把上面这句的代码改成如下:
int count=checkedID.indexOf(position);

if(count == -1){
checkedID.add(podition);
}else{
checkedID.remove(count);
}
还有checkedID的定义最好是定义成全局变量
问题解决,下面的可忽略。。。

--------------------------------------------------------------------------------------------------------
一般来说像这种选中或取消问题,从执行效率来说用下面会更好一些,这也是常用的方法:
List<Boolean> checkedID = new ArrayList<Boolean>();
for(int i=0 ;i<getData();i++){
checkedID.add(false);
}
然后在你的监听中实现
checkedID.set(position, !checkedID.get(position));
当你需要调用选中的选项是,只要判断出checkedID中true的选项就可以了!
--------------------------------------------------------------------------------------------------
当然以上是模板,实际应用中更多的是把你定义的
List<Boolean> checkedID = new ArrayList<Boolean>();
for(int i=0 ;i<getData();i++){
checkedID.add(false);
}
这部分放在你的geData中::
比如你的getData返回的是List<Object>;你可以在List add的时候把其处理成返回
List<HashMap<Object,Boolean>>这样的Map列表!!!
在你需要拿出选中的object 直接判断boolean拿出你的Oject就好!

------------------------------------------------------------------------------------------------
最后希望能够帮到你,也希望你能写出更有效率的代码!
lflldjs
2013-10-16 · TA获得超过118个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:165万
展开全部
加个判断
checkedID.add(position); //这里添加选中项,但是再次点击选中项会再一次添加。
改成if(checkedID.contains(position)){
checkedID.remove(position);
}else{
checkedID.add(position);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式