区块链技术博客
www.b2bchain.cn

ExpandableListView展开折叠列表滚动到指定位置的方法求职学习资料

本文介绍了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 项。
问题解决。

需求

现有一需求,通讯录,需要各组区分(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 项。
问题解决。

需求

现有一需求,通讯录,需要各组区分(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 项。
问题解决。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » ExpandableListView展开折叠列表滚动到指定位置的方法求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们