ExpandableListView+CheckBox使用注意事项
2016-09-09 09:19
363 查看
最近做一个项目需要用到ExpandableListView+CheckBox来做一个全选的功能,刚开始写完后adapter里面的notifyDataSetChanged()不起作用,不能刷新。在网上搜了才明白。具体原理详见http://blog.csdn.net/wuzhipeng1991/article/details/38820647?utm_source=tuicool&utm_medium=referral
总结一下,注意事项:
1、
2、如果在getView方法中要对checkBox进行选中改变,调用了setChecked(),则对checkBox进行状态改变监听时最好不要用到OnCheckedChangeListener,要用OnClickListener,因为在getView中对checkBox的选中状态进行了改变,那么就会电泳OnCheckChange(),会频繁调用,也可能会影响功能实现。
adapter具体代码附上
本博客作为一个本人的经验记录,希望可以帮助到有问题的童鞋,如有不足,请指教
总结一下,注意事项:
1、
在adapter之前new一个list集合,后续都对这个集合进行操作。 如:List<GroupBean> groupBeans = new ArrayList<>(); MyExpandableListAdapter expandableListAdapter = new MyExpandableListAdapter(groupBeans,CheckTermActivity.this); primeExpandListView.setAdapter(expandableListAdapter); 把解析出来的数据直接addAll到groupBeans中,这样就可以保证指向的一直是哪一个内存块。
2、如果在getView方法中要对checkBox进行选中改变,调用了setChecked(),则对checkBox进行状态改变监听时最好不要用到OnCheckedChangeListener,要用OnClickListener,因为在getView中对checkBox的选中状态进行了改变,那么就会电泳OnCheckChange(),会频繁调用,也可能会影响功能实现。
adapter具体代码附上
public class MyExpandableListAdapter extends BaseExpandableListAdapter { private List<CheckTermGroupBean> checkTermGroupBeans; private Context context; private String wujiao = "☆"; public MyExpandableListAdapter(List<CheckTermGroupBean> checkTermGroupBeans,Context context) { this.checkTermGroupBeans = checkTermGroupBeans; this.context = context; } public List<CheckTermGroupBean> getCheckTermGroupBeans() { return checkTermGroupBeans; } @Override public int getGroupCount() { return checkTermGroupBeans.size(); } @Override public int getChildrenCount(int groupPosition) { return checkTermGroupBeans.get(groupPosition).getChildCount(); } @Override public Object getGroup(int groupPosition) { return checkTermGroupBeans.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return checkTermGroupBeans.get(groupPosition).getChild(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public View getGroupView( int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupHolder groupHolder; if(convertView==null) { groupHolder = new GroupHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.expanditem_group, null); groupHolder.groupCheckBox = (CheckBox) convertView.findViewById(R.id.cb_groupitem); convertView.setTag(groupHolder); } else{ groupHolder = (GroupHolder) convertView.getTag(); } groupHolder.groupCheckBox.setText(checkTermGroupBeans.get(groupPosition).getGroupName()); groupHolder.groupCheckBox.setChecked(checkTermGroupBeans.get(groupPosition).getChecked()); groupHolder.groupCheckBox.setOnClickListener(new Group_CheckBox_Click(groupPosition,groupHolder)); return convertView; } class Group_CheckBox_Click implements View.OnClickListener { private int groupPosition; private GroupHolder groupHolder; Group_CheckBox_Click(int groupPosition,GroupHolder groupHolder) { this.groupPosition = groupPosition; this.groupHolder = groupHolder; } public void onClick(View v) { groupHolder.groupCheckBox.setChecked(!checkTermGroupBeans.get(groupPosition).getChecked()); checkTermGroupBeans.get(groupPosition).toggle(); int childrenCount = checkTermGroupBeans.get(groupPosition).getChildCount(); boolean groupIsChecked = checkTermGroupBeans.get(groupPosition).getChecked(); for (int i = 0; i < childrenCount; i++) { checkTermGroupBeans.get(groupPosition).getChild(i).setIsCheck(groupIsChecked); } notifyDataSetChanged(); } } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) { ChildHolder childHolder; if(convertView==null) { childHolder = new ChildHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.expanditem_child, null); childHolder.childCheckBox = (CheckBox) convertView.findViewById(R.id.cb_childitem); convertView.setTag(childHolder); }else{ childHolder = (ChildHolder) convertView.getTag(); } if("0".equals(checkTermGroupBeans.get(groupPosition).getChild(childPosition).getIsInLaw())){ childHolder.childCheckBox.setText(checkTermGroupBeans.get(groupPosition).getChild(childPosition).getTitle()); childHolder.childCheckBox.setTextColor(context.getResources().getColor(R.color.black)); }else{ childHolder.childCheckBox.setText(wujiao+checkTermGroupBeans.get(groupPosition).getChild(childPosition).getTitle()); childHolder.childCheckBox.setTextColor(context.getResources().getColor(R.color.red)); } childHolder. childCheckBox.setChecked(checkTermGroupBeans.get(groupPosition).getChild(childPosition).isCheck()); childHolder.childCheckBox.setOnClickListener(new Child_CheckBox_Click(groupPosition, childPosition,childHolder)); return convertView; } class Child_CheckBox_Click implements View.OnClickListener { private int groupPosition; private int childPosition; private ChildHolder childHolder; Child_CheckBox_Click(int groupPosition, int childPosition,ChildHolder childHolder) { this.groupPosition = groupPosition; this.childPosition = childPosition; this.childHolder = childHolder; } public void onClick(View v) { childHolder.childCheckBox.setChecked(!checkTermGroupBeans.get(groupPosition).getChild(childPosition).isCheck()); changeChecked(childPosition, groupPosition); } } public void changeChecked(int childPosition, int groupPosition) { checkTermGroupBeans.get(groupPosition).getChild(childPosition).toggle(); int childrenCount = checkTermGroupBeans.get(groupPosition).getChildCount(); boolean childrenAllIsChecked = true; for (int i = 0; i < childrenCount; i++) { if (!checkTermGroupBeans.get(groupPosition).getChild(i).isCheck()) childrenAllIsChecked = false; } checkTermGroupBeans.get(groupPosition).setChecked(childrenAllIsChecked); notifyDataSetChanged(); } class GroupHolder{ CheckBox groupCheckBox; } class ChildHolder{ CheckBox childCheckBox; } }
本博客作为一个本人的经验记录,希望可以帮助到有问题的童鞋,如有不足,请指教
相关文章推荐
- 由群发短信功能学习:CheckBox和ListView组合使用的方法和注意事项.
- extjs在formpanel中使用checkbox的注意事项
- AbsListView.OnScrollListener 使用注意事项
- 安卓高手之路之图形系统【5】安卓ListView和EditText配合使用时的注意事项。
- Android ExpandableListView 子item点击事件 注意事项
- ListView+checkBox删除需求实现以及注意事项
- Android使用ListView注意事项
- ListView嵌套GridView使用详解及注意事项
- android重写listview使用addHeaderView和addFooterView注意事项
- Android ListView addHeader使用注意事项(转载)
- ExpandableListView的自定义布局以及注意事项
- ListView中getChildAt(index)的使用注意事项
- XExpandableListView BaseExpandableListAdapter 注意事项
- ListView中getChildAt(index)的使用注意事项
- ListView嵌套GridView使用详解及注意事项
- CListView使用注意事项
- checkBox使用注意事项
- Android ExpandableListView和ScrollView联用的一些注意事项
- ListView中getChildAt(index)的使用注意事项
- ListView使用注意事项