android l滑动的列表,ExpandableListView展开折叠列表滚动到指定位置的方法

需求

现有一需求,通讯录,需要各组区分(Group),点击组标题展开后显示该部门下的员工,但存在一个问题,需要能够通过一个 EditText 搜索其中的员工并滚动到指定位置。

问题在哪

原生的 ExpandableListView 并未提供滚动到第几组第几个的方法,而是保留了 ListView 的 smoothScrollToPosition 方法,但 ListView 的 smoothScrollToPosition 方法只能滚动到单列表情况下的第几项,而对于这种分组折叠展开的列表无能为力。

解决方案

我估摸着,这种折叠列表,实际上标题算一个item,每个展开的子项算一个item,循环遍历,如果上一个组没展开,那也得有一个标题对吧,就+1,如果展开了,就是1个标题+内容,最后再加上当前组目标item的位置,丢给 ListView 去滚动应该就可以了。

尝试

重写 ExpandableListView:

/**

* Kongzue

* https://github.com/kongzue/

* http://kongzue.com/

* myzcxhh@live.cn

* 2020/3/21 15:33

*/

public class AddressListView extends ExpandableListView {

public AddressListView(Context context) {

super(context);

}

public AddressListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public AddressListView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

(api = Build.VERSION_CODES.LOLLIPOP)

public AddressListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {

super(context, attrs, defStyleAttr, defStyleRes);

}

public void scroll(int groupIndex, int childIndex) {

int position = 0;

for (int i = 0; i < groupIndex; i++) {

position++;

if (isGroupExpanded(i)){

position = position + getExpandableListAdapter().getChildrenCount(i);

}

}

position++;

position = position + childIndex;

super.smoothScrollToPosition(position);

}

}

提供方法 scroll(int groupIndex, int childIndex),指定滚动到第 groupIndex 组中的第 childIndex 项。

问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值