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); //这里添加选中项,但是再次点击选中项会再一次添加。
} 展开
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); //这里添加选中项,但是再次点击选中项会再一次添加。
} 展开
2个回答
展开全部
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就好!
------------------------------------------------------------------------------------------------
最后希望能够帮到你,也希望你能写出更有效率的代码!
把上面这句的代码改成如下:
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就好!
------------------------------------------------------------------------------------------------
最后希望能够帮到你,也希望你能写出更有效率的代码!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询