当前位置:   article > 正文

Android之ListView包含RadioButton的单选问题解决办法_android adapter radiobutton

android adapter radiobutton

1.最简洁的解决办法。

adapter里保存当前选中的位置变量,getView方法里,禁用radiobutton的点击事件,只通过listview的onItemClick事件设置选中位置变量,并且通过notifyDataSetChanged刷新列表。getView方法里当前项位置为选中项时设置radiobutton为选中状态。否则为未选中状态。通过adapter.getSelectedItem方法获取当前选中项数据。

注意:本来想着让阻塞radiobutton的获取焦点、获取点击事件,试了各种设置,最后发现rb_status.setClickable(false);禁用radiobutton的点击事件是有效的。


  1. lv_opt.setAdapter(adapter);
  2. lv_opt.setOnItemClickListener(new OnItemClickListener() {
  3. @Override
  4. public void onItemClick(AdapterView<?> parent, View view,
  5. int position, long id) {
  6. adapter.setSelectedIndex(position);
  7. }
  8. });


  1. public class AdapterOptionList extends BaseAdapter<OptionItem> {
  2. public AdapterOptionList(Context context, List<OptionItem> list) {
  3. super(context, list);
  4. }
  5. /**
  6. <span style="white-space:pre"> </span> * 设置选中的项目
  7. <span style="white-space:pre"> </span> * 
  8. <span style="white-space:pre"> </span> * @param position
  9. <span style="white-space:pre"> </span> */
  10. <span style="white-space:pre"> </span>public void setSelectedIndex(int position) {
  11. <span style="white-space:pre"> </span>this.selectedIndex = position;
  12. <span style="white-space:pre"> </span>notifyDataSetChanged();
  13. <span style="white-space:pre"> </span>}
  14. @Override
  15. public View getView(int position, View convertView, ViewGroup parent) {
  16. ViewHolder viewHolder;
  17. if (null == convertView) {
  18. viewHolder = new ViewHolder();
  19. LayoutInflater inflater = LayoutInflater.from(context);
  20. convertView = inflater.inflate(R.layout.item_opt,null);
  21. viewHolder.rb_status = (RadioButton) convertView
  22. .findViewById(R.id.rb_status);
  23. viewHolder.tv_title_opt = (TextView) convertView
  24. .findViewById(R.id.tv_title_opt);
  25. viewHolder.tv_opt_detail = (TextView) convertView
  26. .findViewById(R.id.tv_opt_detail);
  27. convertView.setTag(viewHolder);
  28. } else {
  29. viewHolder = (ViewHolder) convertView.getTag();
  30. }
  31. viewHolder.rb_status.setClickable(false);
  32. OptionItem opt = list.get(position);
  33. if(selectedIndex == position){
  34. viewHolder.rb_status.setChecked(true);
  35. opt.setSeletedStatus(true);
  36. }else{
  37. viewHolder.rb_status.setChecked(false);
  38. opt.setSeletedStatus(false);
  39. }
  40. viewHolder.tv_title_opt.setText(opt.getName());
  41. viewHolder.tv_opt_detail.setText(opt.getDiscription());
  42. return convertView;
  43. }
  44. class ViewHolder {
  45. RadioButton rb_status;
  46. TextView tv_title_opt;
  47. TextView tv_opt_detail;
  48. }
  49. }

2.最简单粗暴的办法。

adapter里设置每一个radiobutton的状态集合变量,在radiobutton的setOnCheckedChangeListener方法里设置集合里的每个radiobutton状态,然后通过notifyDataSetChanged刷新列表。

比如http://blog.csdn.net/checkin001/article/details/11519131

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/733764
推荐阅读
相关标签
  

闽ICP备14008679号