问题描述
- android listview和radiobutton
-
问题是这样的:1 listview 里面有多个item ,其中一个item是已经选中的,现在点击这个选中的radiobutton其他的radiobutton取消选中 ,这个功能已经做好了 了. 如图,但是点击未选中的radiobutton 想要把默认选中的radiobutton给去掉选中状态,可是没能成功!变成2个radiobutton都选中@Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder item=null; if(convertView==null){ item= new ViewHolder(); //获得组件,实例化组件 convertView=layoutInflater.inflate(R.layout.autoset_item, null); item.bankNameTxt=((TextView) convertView.findViewById(R.id.cardInfoTxt)); item.checkAuto=((RadioButton) convertView.findViewById(R.id.checkAuto)); item.cardIdHide=((TextView) convertView.findViewById(R.id.cardIdTextVIew)); item.cardIdHide.setVisibility(View.INVISIBLE); //可以使用setTag把查找的view缓存起来方便多次重用 convertView.setTag(item); }else{ item=(ViewHolder)convertView.getTag(); } final RadioButton radio= (RadioButton) convertView.findViewById(R.id.checkAuto); item.checkAuto=radio; item.checkAuto.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //重置,确保最多只有一项被选中 for (String key : states.keySet()) { states.put(key, false); } states.put(String.valueOf(position), radio.isChecked()); System.out.println(position + "----------------"); CardAutoListAdapter.this.notifyDataSetChanged(); } }); boolean res=false; if(states.get(String.valueOf(position)) == null || states.get(String.valueOf(position))== false){ res=false; states.put(String.valueOf(position), false); } else res = true; item.checkAuto.setChecked(res); //默认选中 if (data.get(position).get("isAutoPay").equals("0")){ System.out.println(position); item.checkAuto.setChecked(true); } //绑定数据 ,将传入data进行逐个赋值 item.bankNameTxt.setText(data.get(position).get("bankName") + " **** **** **** " + data.get(position).get("endAcctid") + ""); item.cardIdHide.setText(data.get(position).get("cardId") + ""); // else{ // //if (data.get(position).get("isAutoPay").toString().trim().equals("0")){ // System.out.println(position); // item.checkAuto.setChecked(false); // //} // } return convertView; } static class ViewHolder { TextView bankNameTxt;//银行名称 TextView cardInfoNo;//银行卡号 RadioButton checkAuto;//代扣选择 TextView cardIdHide;//卡号 }
解决方案
使用SparseArray保存每个按钮的选中状态,key:position,value:true-false;
给convertView(或者单选按钮)设置点击事件,
每次点击选中相应的radioButton并将含有被点击radioButton的pos对应value置为true。
然后遍历SparseArray,将SparseArray中value等于false的radioButton置为不选中状态。
解决方案二:
有没有大神 指导一二
解决方案三:
你这个只是针对单个item操作 选中和不选中
需要你写个方法,去除其他item的勾选操作
解决方案四:
应该用CheckBox,不是RadioButton
解决方案五:
这个就是converview复用问题,所以需要一些adapter在内存中进行处理。以前项目开发也遇到过,网上解决方案也挺多,比如:http://blog.csdn.net/fastthinking/article/details/41014411
解决方案六:
1、在主Activity中创建一个static的list存放,是否选中的数据。再创建一个static的更新listview的方法。
2、每次选中item的button时,修改该list的数据(先全为false,再通过gettag方法找到item位置,设置为true)。
3、最后再执行更新listview的方法。
之前我也遇到过,用这个笨方法解决的。
时间: 2024-08-03 20:45:07