1.ExpandableListView 布局
和普通的控件一样使用
<ExpandableListView
android:id="@+id/expandlist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:groupIndicator="@null" />
android:groupIndicator="@null" //取消自带向下的箭头
在代码中设置为
mExpandableListView.setDivider(null); //取消自带向下的箭头
mExpandableListView.setGroupIndicator(null); //取消下滑线
2. 适配器
class MyExpandableListViewAdapter extends BaseExpandableListAdapter
{
private Context context;
public MyExpandableListViewAdapter(Context context)
{
this.context = context;
}
/**
*
* (获取一级菜单的个数)
*
* @return
* @see android.widget.ExpandableListAdapter#getGroupCount()
*/
@Override
public int getGroupCount()
{
return group_list.size();
}
/**
*
* (获取指定一级菜单的二级菜单数)
*
* @param groupPosition
* @return
* @see android.widget.ExpandableListAdapter#getChildrenCount(int)
*/
@Override
public int getChildrenCount(int groupPosition)
{
return item_list.get(groupPosition).size();
}
/**
*
* 获取指定(一级菜单)的数据
*
* @param groupPosition
* @return
* @see android.widget.ExpandableListAdapter#getGroup(int)
*/
@Override
public Object getGroup(int groupPosition)
{
return group_list.get(groupPosition);
}
/**
*
* 获取指定一级菜单下二级菜单数据。
*
* @param groupPosition
* @param childPosition
* @return
* @see android.widget.ExpandableListAdapter#getChild(int, int)
*/
@Override
public Object getChild(int groupPosition, int childPosition)
{
return item_list.get(groupPosition).get(childPosition);
}
/**
*
* 获取指定一级菜单的ID,这个一级菜单ID必须是唯一的
*
* @param groupPosition
* @return
* @see android.widget.ExpandableListAdapter#getGroupId(int)
*/
@Override
public long getGroupId(int groupPosition)
{
return groupPosition;
}
/**
*
* 获取指定一级菜单中的指定子元素ID
*
* @param groupPosition
* @param childPosition
* @return
* @see android.widget.ExpandableListAdapter#getChildId(int, int)
*/
@Override
public long getChildId(int groupPosition, int childPosition)
{
return childPosition;
}
/**
*
* 一级菜单和二级菜单是否持有稳定的ID,也就是底层数据的改变不会影响到它们。
*
* @return
* @see android.widget.ExpandableListAdapter#hasStableIds()
*/
@Override
public boolean hasStableIds()
{
return true;
}
/**
*
* 加载一级菜单的布局
*
* @param groupPosition 一级菜单位置
* @param isExpanded 该组是展开状态还是伸缩状态
* @param convertView 重用已有的视图对象
* @param parent 返回的视图对象始终依附于的视图组
* @return
* @see android.widget.ExpandableListAdapter#getGroupView(int, boolean, android.view.View,
* android.view.ViewGroup)
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
GroupHolder groupHolder = null;
if (convertView == null)
{
convertView = LayoutInflater.from(context).inflate(R.layout.expendlist_group, null);
groupHolder = new GroupHolder();
groupHolder.txt = (TextView)convertView.findViewById(R.id.txt);
groupHolder.img = (ImageView)convertView.findViewById(R.id.img);
convertView.setTag(groupHolder);
}
else
{
groupHolder = (GroupHolder)convertView.getTag();
}
if (!isExpanded)
{
groupHolder.img.setBackgroundResource(R.drawable.group_img);
}
else
{
groupHolder.img.setBackgroundResource(R.drawable.group_open_two);
}
groupHolder.txt.setText(group_list.get(groupPosition));
return convertView;
}
/**
*
* 加载二级菜单的布局
*
* @param groupPosition 一级菜单位置
* @param childPosition 二级菜单元素位置
* @param isLastChild 子元素是否处于组中的最后一个
* @param convertView 重用已有的视图(View)对象
* @param parent 返回的视图(View)对象始终依附于的视图组
* @return
* @see android.widget.ExpandableListAdapter#getChildView(int, int, boolean, android.view.View,
* android.view.ViewGroup)
*/
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
{
ItemHolder itemHolder = null;
if (convertView == null)
{
convertView = LayoutInflater.from(context).inflate(R.layout.expendlist_item, null);
itemHolder = new ItemHolder();
itemHolder.txt = (TextView)convertView.findViewById(R.id.txt);
itemHolder.img = (ImageView)convertView.findViewById(R.id.img);
convertView.setTag(itemHolder);
}
else
{
itemHolder = (ItemHolder)convertView.getTag();
}
itemHolder.txt.setText(item_list.get(groupPosition).get(childPosition));
itemHolder.img.setBackgroundResource(item_list2.get(groupPosition).get(childPosition));
return convertView;
}
/**
*
* 是否选中指定位置上的子元素。
*
* @param groupPosition
* @param childPosition
* @return
* @see android.widget.ExpandableListAdapter#isChildSelectable(int, int)
*/
@Override
public boolean isChildSelectable(int groupPosition, int childPosition)
{
return true;
}
}
3.给控件设置适配器
expandableListView = (ExpandableListView)findViewById(R.id.expandlist);//在布局中找到该控件
expandableListView.setAdapter(MyExpandableListViewAdapter)//设置适配器
expandableListView.notifyDataSetChanged()//当数据更新调用 更新界面
3.1 当你要展开一个的时候
expandableListView .setOnGroupExpandListener(new OnGroupExpandListener() {
@Overridepublic void onGroupExpand(int groupPosition) {
for (int i = 0; i < MyExpandableListViewAdapter
.getGroupCount(); i++) {
if (groupPosition != i) {
expandableListView .collapseGroup(i);
}
}
}
});