ExpandableListView不是什么新鲜的东西了。最近使用到了。记录一下,在修改下拉箭头图片、位置;设置分割线、点击事件分发等问题的内容。
箭头图片、位置的修改
在xml中配置:
android:groupIndicator=”@null”
然后在布局的有右边写一个ImageView之类的就可以了。在java中写
mExpandableListView.setGroupIndicator(null);分割线的设置
在xml中配置:
android:divider=”#00000000”
android:childDivider=”#00000000”还可以设置dividerHeight等
在java中写
mExpandableListView.setDivider(drawable);
mExpandableListView.setChildDivider(drawable);点击事件的问题
如果在ExpandableListView的主列表item中,包含可以点击的控件,比如Button、CheckBox、RadioButton、ImageButton等。
ExpandableListView的setOnItemClick会失效解决方法是:在ExpandableListAdapter的getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)方法中。
@Override
public View getGroupView(int groupPosition, final boolean isExpanded, View convertView, final ViewGroup parent) {
// mImageView是替换下拉箭头的图片控件。
if (isExpanded) {
mImageView.setImageResource(R.drawable.expand_up);
} else {
mImageView.setImageResource(R.drawable.expand_down);
}
mImageView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
if (isExpanded) {
((ExpandableListView) parent).collapseGroup(groupPosition);
} else {
((ExpandableListView) parent).expandGroup(groupPosition);
}
}
});
}
- Adapter的编写。
举个栗子:
/**
* @author ShenYu 20170904
*/
public class ExpandableDataListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private LayoutInflater inflater;
private Map<CompleteResponse.DataBean, String[]> mMap;
public ExpandableDataListAdapter(Context mContext, Map<CompleteResponse.DataBean, String[]> mMap) {
this.mContext = mContext;
inflater = LayoutInflater.from(mContext);
this.mMap = mMap;
}
@Override
public int getGroupCount() {
return mMap == null ? 0 : mMap.keySet().size();
}
@Override
public int getChildrenCount(int groupPosition) {
if (mMap == null) return 0;
Set set = mMap.keySet();
Object[] keyArray = set.toArray();
String[] valueArray = mMap.get(keyArray[groupPosition]);
return valueArray == null ? 0 : valueArray.length;
}
@Override
public Object getGroup(int groupPosition) {
if (mMap == null) return null;
Set set = mMap.keySet();
return set.toArray()[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
if (mMap == null) return null;
Set set = mMap.keySet();
Object[] keyArray = set.toArray();
return mMap.get(keyArray[groupPosition])[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, final ViewGroup parent) {
final GroupViewHolder mGHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_complete, parent, false);
mGHolder = new GroupViewHolder();
mGHolder.ivExpand = (ImageView) convertView.findViewById(R.id.iv_expand);
convertView.setTag(mGHolder);
} else {
mGHolder = (GroupViewHolder) convertView.getTag();
}
final boolean flag = isExpanded;
if (isExpanded) {
mGHolder.ivExpand.setImageResource(R.drawable.icon_up);
} else {
mGHolder.ivExpand.setImageResource(R.drawable.icon_down);
}
final ExpandableListView lv = (ExpandableListView) parent;
mGHolder.ivExpand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flag) {
lv.collapseGroup(groupPosition);
} else {
lv.expandGroup(groupPosition);
}
}
});
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
// 子item的布局和数据初始化。
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
private class GroupViewHolder {
ImageView ivExpand;
}
private class ChildViewHolder {
}
}