博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之ListView的使用技巧
阅读量:4320 次
发布时间:2019-06-06

本文共 3858 字,大约阅读时间需要 12 分钟。

之前有总结过关于ListView的一些优化技巧,比如它的ConvertView的复用Recycler机制,使用ViewHolder来提高列表条目的findById的效率,以及宽高的设置确定值的好处,如果有图片则在停止滑动的时候再进行加载显示等等。

这次是就ListView具有的一些功能,细节的东西来展开。

1. 设置分割线

android:divider="@color/colorAccent"android:dividerHeight="1dp"

2. 隐藏滚动条(none | horizonal | vertical)

android:scrollbars="none"

3. 取消Item的点击效果(自定义选择效果)

android:listSelector="@color/transparent"

4. 滑动到第几项Item

mListView.setSelection(15);mListView.smoothScrollToPosition(position);

5. 动态修改ListView

mAdapter.notifyDataSetChanged();

6. 处理空ListView

mListView.setEmptyView(view);

7. ListView的滑动监听

  • OnTouchListener
mListView.setOnTouchListener(new View.OnTouchListener() {    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()){            case MotionEvent.ACTION_DOWN:                //手指按下                break;            case MotionEvent.ACTION_MOVE:                //滑动                break;            case MotionEvent.ACTION_UP:                //手指抬起                break;        }        return false;    }});

 

  • OnScrollListener
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {    @Override    public void onScrollStateChanged(AbsListView view, int scrollState) {        switch (scrollState){            case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:                //停止滑动                Log.e("ListView:", "SCROLL_STATE_IDLE");                break;                case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:                //滑动中                Log.e("ListView:", "SCROLL_STATE_TOUCH_SCROLL");                break;            case AbsListView.OnScrollListener.SCROLL_STATE_FLING:                //手指拋动时                Log.e("ListView:", "SCROLL_STATE_FLING");                break;        }    }        @Override    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {        //滑动时一直调用        //firstVisibleItem 当前页面第一个item        //visibleItemCount 可见的item数        //totalItemCount 总数        //Log.e("ListView: onScroll item", "firstVisibleItem=" + firstVisibleItem + ", visibleItemCount" + visibleItemCount);    }});

8. 设置ListView具有弹性

 修改maxOverScrollY的想要的值,就可让ListView上下可以弹动了。

@Overrideprotected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {    return super.overScrollBy(deltaX, deltaY,            scrollX, scrollY, scrollRangeX, scrollRangeY,            maxOverScrollX, maxOverScrollY, isTouchEvent);}

9. 自动显示和隐藏布局的ListView(比如滑动显示隐藏Toolbar或FloatButton等)

 根据触摸监听,知道是上滑还是下滑,之后根据需求,把相关的控件随着ListeView的滑动而进行显示与隐藏;

private static final int TOUCH_SLOP = ViewConfiguration.getTouchSlop() * 2;private int mDownY, mCurrY, direction = 0;private View.OnTouchListener mOnTouchListener = new View.OnTouchListener() {    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()){            case MotionEvent.ACTION_DOWN:                mDownY = (int) event.getY();                break;            case MotionEvent.ACTION_MOVE:                mCurrY = (int) event.getY();                if (Math.abs(mCurrY - mDownY) > TOUCH_SLOP){                    if (mCurrY > mDownY){                        direction = -1; //下滑 显示                    }else if (mCurrY < mDownY){                        direction = 1; //上滑 隐藏                    }                    mDownY = mCurrY;                }                if (direction == -1){                    btn.setVisibility(View.VISIBLE);                }else if (direction == 1){                    btn.setVisibility(View.GONE);                }                break;            case MotionEvent.ACTION_UP:                break;        }        return false;    }};

10. getItemViewType

根据位置或者固有的逻辑处理需要显示不同位置的布局类型

转载于:https://www.cnblogs.com/denluoyia/p/9012160.html

你可能感兴趣的文章
unity3d 射弹基础案例代码分析
查看>>
thinksns 分页数据
查看>>
os模块
查看>>
LINQ to SQL vs. NHibernate
查看>>
基于Angular5和WebAPI的增删改查(一)
查看>>
windows 10 & Office 2016 安装
查看>>
最短路径(SP)问题相关算法与模板
查看>>
js算法之最常用的排序
查看>>
Python——交互式图形编程
查看>>
经典排序——希尔排序
查看>>
团队编程项目作业2-团队编程项目代码设计规范
查看>>
英特尔公司将停止910GL、915GL和915PL芯片组的生产
查看>>
团队编程项目作业2-团队编程项目开发环境搭建过程
查看>>
<Using parquet with impala>
查看>>
07-Java 中的IO操作
查看>>
通过镜像下载Android系统源码
查看>>
Maven配置
查看>>
HttpServletRequest /HttpServletResponse
查看>>
SAM4E单片机之旅——24、使用DSP库求向量数量积
查看>>
从远程库克隆库
查看>>