这个问题折磨了好几天,一直拖着没搞,最后收尾了,逃不掉了,没办法
下面是实现的效果,方便大家了解一下这个是啥东西
就是点击全部的checkbox的时候下面的都会选中,下面的三个item是动态创建的,当动态创建的item点满的时候,”全部“,会触发勾选,有个细微的联动效果,可能有同学一时间摸不着头脑,比如,俺,当时感觉难搞,硬是不想搞...
我只提供一些核心的代码,具体部分,各位同学自己写吧,全粘贴上来实在太多了
然后就说一下这个咋实现的
其实不难,对吧,但我写的好像比较复杂,我打算封装一下的,但项目里面就这一行,我想想就算了,有哪位同学能帮忙封装一下的感激不尽
使用cb_all_small_event是checkbox,自己find或者@BindView一下
cb_all_small_event.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//判断是不是选中
if (cb_all_small_event.isChecked()) {
cb_all_small_event.setChecked(true);//打勾
anl_relatedtypelist_small.removeAllViews();//清空view
EventSmallList(eventSmallArrayList, true);//重新添加,trun为全选
} else {
anl_relatedtypelist_small.removeAllViews();
cb_all_small_event.setChecked(false);
EventSmallList(eventSmallArrayList, false);//重新添加,false为全取消
}
}
});
核心部分
private void EventSmallList(List<EventSmall> les, boolean tf) {
les_num = les.size();//这个十分重要,是获取这个list大小的,当选择满的时候触发全选,不满足的时候就取消全选
event_type.clear();
for (EventSmall pp : les) {//下面就是循环创建的过程
esl = new EventSmall();
String type_id = pp.getEvent_type_id();
String type_name = pp.getEvent_type_name();
esl.setEvent_type_id(type_id);
esl.setEvent_type_name(type_name);
NewEventSmall(type_name, type_id, tf);
}
}
private void NewEventSmall(String type_name, String type_id, boolean tf) {
//设置大小
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
LinearLayout project = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.item_checkbox, null);
project.setLayoutParams(lp);
LinearLayout ll_checkbox = (LinearLayout) project.findViewById(R.id.ll_checkbox);
CheckBox cb_event_kind_name = (CheckBox) ll_checkbox.findViewById(R.id.cb_event_kind_name);
TextView tv_event_kind_id = (TextView) ll_checkbox.findViewById(R.id.tv_event_kind_id);
cb_event_kind_name.setText(type_name);
tv_event_kind_id.setText(type_id);
if (tf) {//是否全选,全选的话,这边创建的时候都会勾选
cb_event_kind_name.setChecked(true);
} else {
cb_event_kind_name.setChecked(false);
}
anl_relatedtypelist_small.addView(project);//添加到布局
//checkbox的点击
cb_event_kind_name.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
event_type.add(type_id);
if (les_num == event_type.size()) {//判断是否全选
cb_all_small_event.setChecked(true);
} else {
cb_all_small_event.setChecked(false);
}
} else {
event_type.remove(type_id);
cb_all_small_event.setChecked(false);
}
}
});
}