ExpandableListView实现三级多选
<ExpandableListView android:id="@+id/meeting_listview" android:layout_width="@dimen/px_to_dip_600" android:scrollbars="none" android:layout_height="wrap_content" android:divider="@null" android:groupIndicator="@null"/>
多选item <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/linear_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/px_to_dip_5" android:background="@drawable/bg_toggle_solid_blue"> <CheckBox android:id="@+id/cb" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:button="@null" android:focusable="false" android:paddingRight="@dimen/px_to_dip_10" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="社区医院" android:textColor="@drawable/remote_color_select" android:textSize="@dimen/font_size_px_28" android:padding="@dimen/px_to_dip_10" /> </RelativeLayout> public class ExpandListViewAdapter extends BaseExpandableListAdapter { private List<InviteHosipalBean> mListData; private LayoutInflater mInflate; private Context context; public ExpandListViewAdapter(List<InviteHosipalBean> mListData, Context context) { this.mListData = mListData; this.context = context; this.mInflate = LayoutInflater.from(context); } @Override public int getGroupCount() { return mListData.size(); } @Override public int getChildrenCount(int groupPosition) { return 1; } @Override public Object getGroup(int groupPosition) { return mListData.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return mListData.get(groupPosition).getDeptList().get(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 View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { FirstHolder holder = null; if (convertView == null) { holder = new FirstHolder(); convertView = mInflate.inflate(R.layout.item_expand_lv_first, parent, false); holder.tv = ((TextView) convertView.findViewById(R.id.tv)); convertView.setTag(holder); } else { holder = (FirstHolder) convertView.getTag(); } holder.tv.setText(mListData.get(groupPosition).getName()); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { CustomExpandableListView lv = ((CustomExpandableListView) convertView); if (convertView == null) { lv = new CustomExpandableListView(context); lv.setGroupIndicator(null); lv.setDivider(null); } SecondAdapter secondAdapter = new SecondAdapter(context, mListData.get(groupPosition).getDeptList()); lv.setAdapter(secondAdapter); return lv; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } /* * 第二层的适配器 * */ class SecondAdapter extends BaseExpandableListAdapter { Context context; LayoutInflater inflater; List<InviteDeptBean> listInviteDeptBean; public SecondAdapter(Context context,List<InviteDeptBean> listInviteDeptBean) { this.context = context; this.listInviteDeptBean = listInviteDeptBean; inflater = LayoutInflater.from(context); } @Override public int getGroupCount() { int size = listInviteDeptBean.size(); Log.d("bigname", "getGroupCount: "+size); return size; } @Override public int getChildrenCount(int groupPosition) { return listInviteDeptBean.get(groupPosition).getMemberList().size(); } @Override public Object getGroup(int groupPosition) { return listInviteDeptBean.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return listInviteDeptBean.get(groupPosition).getMemberList().get(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 View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { SecondHolder holder = null; if (convertView == null) { holder = new SecondHolder(); convertView = mInflate.inflate(R.layout.item_expand_lv_first, parent, false); holder.tv = ((TextView) convertView.findViewById(R.id.tv)); convertView.setTag(holder); } else { holder = (SecondHolder) convertView.getTag(); } holder.tv.setPadding(40,0,0,0); holder.tv.setText(listInviteDeptBean.get(groupPosition).getName()); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ThirdHolder holder = null; if (convertView == null) { holder = new ThirdHolder(); convertView = mInflate.inflate(R.layout.item_expand_lv_third, parent, false); holder.tv = ((TextView) convertView.findViewById(R.id.tv)); holder.cb = ((CheckBox) convertView.findViewById(R.id.cb)); convertView.setTag(holder); } else { holder = (ThirdHolder) convertView.getTag(); } holder.tv.setText(listInviteDeptBean.get(groupPosition).getMemberList().get(childPosition).getName()); final ThirdHolder thirdHolder = holder; thirdHolder.cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean isChecked = thirdHolder.cb.isChecked(); Log.d("bigname", "onCheckedChanged: third:" + groupPosition + "," + isChecked); listInviteDeptBean.get(groupPosition).getMemberList().get(childPosition).setCheck(isChecked); } }); thirdHolder.cb.setChecked(listInviteDeptBean.get(groupPosition).getMemberList().get(childPosition).isCheck()); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } class FirstHolder { TextView tv; } class SecondHolder { TextView tv; } class ThirdHolder{ TextView tv; CheckBox cb; } }
import android.content.Context; import android.util.AttributeSet; import android.widget.ExpandableListView; /** * author:Created by LiangSJ * date: 2017/8/21. * description:解决,expandablelistview嵌套冲突问题 */ public class CustomExpandableListView extends ExpandableListView{ public CustomExpandableListView(Context context) { super(context); } public CustomExpandableListView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomExpandableListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public CustomExpandableListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // 解决显示不全的问题 int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2 , MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }