ExpandableListView的基本使用和注意事项
**1.概述**
ExpandableListView是可扩展的二级下拉列表,继承ListView
**2.使用步骤**
① 布局中定义ExpandableListView控件
② 初始化Group数据,Child数据(ArrayList<ArrayList<Info>>)
③ 适配器BaseExpandaListAdapter
重写10个方法 getGroupCount(),getGroup(),getGroupId(),getGroupView()
getChildCount(),getChild(),getChildId(),getChildView()
hasStablelds()行是否具有唯一id isChildSelectable() 子列表是否可点击事件
**3.属性**
divider 父类分割线
childDivider 子类分割线
dividerHeight 分割线高度
groupIndicator 控制父类前面的小箭头
android:groupIndicator="@drawable/picture" 箭头换照片
android:groupIndicator="@null" 去掉小箭头
indicatorLeft 箭头或者自己设置的图片的右边框距离手机左边边缘的距离,类似于marginLeft
indicatorStart 箭头或者自己设置的图片的左边框距离手机左边边缘的距离,类似于marginLeft以上两个属性相结合可以使箭头或自己设置的图片变大变小或者翻转,因为控制了箭头或图片的左右边框
childIndicator 用于设置子项前显示的图标,不设置的话默认是没有图标的
//设置图标选择
<item android:drawable=”@drawable/icon_t” android:state_expanded=”true”/>
<item android:drawable=”@drawable/icon_f” android:state_expanded=”false”/>
**4.点击事件**
onGroupClick() 父类点击事件
onChildClick() 子类点击事件
ScollView(垂直)
ScrollView,通过官方文档的继承关系可以看出,它继承自FrameLayout,所以它是一种特殊类型的FrameLayout,
因为它可以使用用户滚动显示一个占据的空间大于物理显示的视图列表.
值得注意的是,ScrollView只能包含一个子视图或视图组,在实际项目中,通常包含的是一个垂直的LinearLayout.
HorizontalScrollView(水平)
把其中包裹的LinearLayout的android:orientation属性设置为horizontal即可实现水平滚动的效果.
ExpandableListView的代码展示及注意事项
1、首次加载全部展开:
mDownloadListView.setAdapter(mDownloadAdapter);
for (int i = 0; i < downloadGroup.size(); i++) {
mDownloadListView.expandGroup(i);
}
提醒:加载前别忘了判断adapter是否为空和有没有Group数据哦、
2、不能点击收缩:
mDownloadListView.setOnGroupClickListener(new OnGroupClickListener() {
@Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { //
TODO Auto-generated method stub return true;
}
});
OK了,把他的组点击事件屏蔽
3、ExpandableListView的长按事件
网上的资料很多,但是真正管用的没几个,最后找到一个确实可以用的,在这分享下:
(1)//长按事件
mExpandableListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
menu.setHeaderTitle("选择操作");
menu.add(0, DOWNLOAD_RETRY, 0, "重试");
menu.add(0, DOWNLOAD_DEL, 0, "删除");
menu.add(0, DOWNLOAD_START, 0, "启动");
}
});
}
(2) /* 长按菜单响应函数 */ @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub
//关键代码
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
//上面的type设定这里类型的判定!这里是child判定!
int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
//在child判定里面,获取该child所属group!
int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
//在child判定里面,获取该child所属position!
switch (item.getItemId()) {
case DOWNLOAD_RETRY: makeTextShort("我是重试");
break;
case DOWNLOAD_DEL: makeTextShort("我是删除");
break;
case DOWNLOAD_START: makeTextShort("我是启动");
default:
break;
}
return true;
}
return false;
}