ListView使用

《ListView使用》

ListView是我们日常使用非常多的控件之一,所以今天给大家分享一下ListView的使用心得。

addHeaderView()和addFooterView()

添加头部和尾部,常用于上拉刷新和下拉刷新等场景中,我们需要在setAdapter()之前调用。

setAdapter()和getAdapter()

设置ListView的适配器,用于提供ListView要展示的数据。注意这里的getAdapter(),当ListView没有头部或者尾部时,返回的adapter为setAdapter中传入的值,否则,返回的adapter为对setAdapter中传进的adapter的封装值HeaderViewListAdapter。这里也可以看出为什么addHeaderView()和addFooterView()必须在setAdapter之前调用,因为在setAdapter的实现中需要判断ListView是否存在HeaderView和FooterView。

setChoiceMode()

设置Listview的选择模式,默认为CHOICE_MODE_NONE,可以设置为CHOICE_MODE_SINGLE(单选),CHOICE_MODE_MULTIPLE(多选)。如果设置为单选和多选模式,ListView会去记录每个Item的Checked状态,当item被点击时,该item会自动改变该item的Checked状态。如果我们的Item View需要根据Checked状态改变显示,那么该Item View需要implements Checkable,具体实现可以参考CheckedTextView。

isItemChekced()和getCheckedItem()

当Listview设置了单选或者多选模式时,我们可以通过该接口知道哪些Item被选择了。

setItemChecked()

当Listview设置了单选或者多选模式时,可以手动设置某个item被checked。

setSelection()和setSelectionFromTop()

可以通过该接口来设置ListView的滚动位置,我们知道ListView中getScrollY()无法正确获取到ListView当前的滚动距离,并总是返回0.所以当我们需要滚动到某一位置时,可以根据item所在的position来控制滚动的距离。

smoothScrollToPosition()和smoothScrollToPositionFromTop()

该接口与setSelection()和setSelectionFromTop()的功能类似,只是滚动的效果不一样,该滚动效果比较平缓。

getFirstVisiblePosition()和getLastVisiblePosition()

该接口可以获取到ListView当前显示区域中第一个显示的item所在位置和最后一个显示的Item所在位置。

常用使用场景:保存当前ListView的滚动距离,当离开该页面再返回显示ListView时,仍显示的是上一次停留的位置。

/**
 * 获取ListView的滚动距离
 * @param listView
 * @return
 */
Pair<Integer, Integer> getListViewScrollY(ListView listView) {
    int position = listView.getFirstVisiblePosition();
    int top = listView.getChildAt(0).getTop();
    return Pair.create(position, top);
}

/**
 * 滚动ListView到指定的位置
 * @param listView
 * @param posAndTop
 * @param smoothScroll
 */
void setScrollY(ListView listView, Pair<Integer, Integer> posAndTop, boolean smoothScroll) {
    final int position = posAndTop.first;
    final int top = posAndTop.second;
    if (smoothScroll) {
        listView.setSelectionFromTop(position, top);
    } else {
        listView.setSelectionFromTop(position, top);    
    } 
}
    原文作者:codeKeeper
    原文地址: https://www.jianshu.com/p/6c42af9d60e7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞