ExpandableListView的基本使用和注意事项

本文介绍了ExpandableListView的基本使用,包括首次加载时全部展开的处理、如何阻止组的收缩点击,以及实现有效的长按事件。在使用时,注意在加载前检查adapter和Group数据,同时提供了一个可行的长按事件实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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; 
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值