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

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

1. 设置分割线

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

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

  1. android:scrollbars="none"

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

  1. android:listSelector="@color/transparent"

4. 滑动到第几项Item

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

5. 动态修改ListView

  1. mAdapter.notifyDataSetChanged();

6. 处理空ListView

  1. mListView.setEmptyView(view);

7. ListView的滑动监听

  • OnTouchListener
  1. mListView.setOnTouchListener(new View.OnTouchListener() {
  2. @Override
  3. public boolean onTouch(View v, MotionEvent event) {
  4. switch (event.getAction()){
  5. case MotionEvent.ACTION_DOWN:
  6. //手指按下
  7. break;
  8. case MotionEvent.ACTION_MOVE:
  9. //滑动
  10. break;
  11. case MotionEvent.ACTION_UP:
  12. //手指抬起
  13. break;
  14. }
  15. return false;
  16. }
  17. });
  • OnScrollListener
  1. mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
  2. @Override
  3. public void onScrollStateChanged(AbsListView view, int scrollState) {
  4. switch (scrollState){
  5. case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
  6. //停止滑动
  7. Log.e("ListView:", "SCROLL_STATE_IDLE");
  8. break;
  9.  
  10. case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
  11. //滑动中
  12. Log.e("ListView:", "SCROLL_STATE_TOUCH_SCROLL");
  13. break;
  14. case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
  15. //手指拋动时
  16. Log.e("ListView:", "SCROLL_STATE_FLING");
  17. break;
  18. }
  19. }
  20.  
  21. @Override
  22. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
  23. //滑动时一直调用
  24. //firstVisibleItem 当前页面第一个item
  25. //visibleItemCount 可见的item数
  26. //totalItemCount 总数
  27. //Log.e("ListView: onScroll item", "firstVisibleItem=" + firstVisibleItem + ", visibleItemCount" + visibleItemCount);
  28. }
  29. });

8. 设置ListView具有弹性

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

  1. @Override
  2. protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
  3. return super.overScrollBy(deltaX, deltaY,
  4. scrollX, scrollY, scrollRangeX, scrollRangeY,
  5. maxOverScrollX, maxOverScrollY, isTouchEvent);
  6. }

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

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

  1. private static final int TOUCH_SLOP = ViewConfiguration.getTouchSlop() * 2;
  2. private int mDownY, mCurrY, direction = 0;
  3. private View.OnTouchListener mOnTouchListener = new View.OnTouchListener() {
  4. @Override
  5. public boolean onTouch(View v, MotionEvent event) {
  6. switch (event.getAction()){
  7. case MotionEvent.ACTION_DOWN:
  8. mDownY = (int) event.getY();
  9. break;
  10. case MotionEvent.ACTION_MOVE:
  11. mCurrY = (int) event.getY();
  12. if (Math.abs(mCurrY - mDownY) > TOUCH_SLOP){
  13. if (mCurrY > mDownY){
  14. direction = -1; //下滑 显示
  15. }else if (mCurrY < mDownY){
  16. direction = 1; //上滑 隐藏
  17. }
  18. mDownY = mCurrY;
  19. }
  20. if (direction == -1){
  21. btn.setVisibility(View.VISIBLE);
  22. }else if (direction == 1){
  23. btn.setVisibility(View.GONE);
  24. }
  25. break;
  26. case MotionEvent.ACTION_UP:
  27.  
  28. break;
  29. }
  30. return false;
  31. }
  32. };

10. getItemViewType

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

Android之ListView的使用技巧的更多相关文章

  1. Android之ListView常用技巧

    ListView是一个非常常用的列表控件,虽然在5.x时代ListView的风头正在逐渐的被RecyclerView抢去,但是ListView的使用范围依然十分广泛. 接下来的ListView的常用技 ...

  2. Android开发——ListView使用技巧总结(二)

    0.  前言 Android中的ListView是用的比较多的控件之一,在上一篇Android开发--ListView使用技巧总结(一)中对ListView的ViewHolder机制.优化卡顿方式以及 ...

  3. Android开发——ListView使用技巧总结(一)

    )还有一点就是要控制异步任务的执行频率,因为当用户频繁的上下滑动,会瞬间产生上百个异步任务,会带来无意义的大量的UI更新操作,因此可以考虑在列表滑动时停止进行异步任务,直到列表停下来. //判断列表的 ...

  4. Android群英传知识点回顾——第四章:ListView常用优化技巧

    4.1 ListView常用优化技巧 4.1.1 使用ViewHolder模式提高效率 4.1.2 设置项目间分割线 4.1.3 隐藏ListView的滚动条 4.1.4 取消ListView的Ite ...

  5. Android 实现ListView异步加载图片

    ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; ...

  6. Android—万能ListView适配器

    ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...

  7. Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

    昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...

  8. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  9. Android中ListView的几种常见的优化方法

    Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...

随机推荐

  1. C#-安全

    分为两种,代码访问安全,基于角色的安全性. 代码访问安全.是代码告诉.net框架,自己(代码)正确执行,需要的权限,.net框架手动分配代码可执行操作方面的权限,代码可列出调用自己需要的权限集合. 基 ...

  2. Ubuntu 16.04下安装网络流量分析工具 Wireshark

    本文链接地址:https://www.linuxidc.com/Linux/2016-08/134526.htm 切勿用商业用途 sudo apt-add-repository ppa:wiresha ...

  3. crosss compile VLC with OpenMAX on ARM board(RockChip RK3399),in order to use Hard Acceleration when decode video

    reference:http://www.x90x90x90.com/en/raspberry-pi-3-howto-compile-vlc-with-hardware-acceleration/ 1 ...

  4. 17、docker多机网络通信overlay

      理论上来说多台宿主机之间的docker容器之间是无法通讯的,但是多台宿主机之间的docker容器之间是可以通讯的,主要是通过VXLAN技术来实现的.   GitHub上对于docker-overl ...

  5. SED 学习笔记

    1. Sed简介   sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成 ...

  6. Jersey构建Restful风格的webservices

    最近一直在搞老项目的开发工作,很少写博文了.听了两位阿里巴巴大牛的讨论,决定试试用restful风格的webservices看看. 这里用的是Jersey这个框架,刚开始弄,有点麻烦,只能到处查资料. ...

  7. 403 - 禁止访问: 访问被拒绝(IIS)

    错误如下: 解决方法: 1,点击当前网站主页,选择默认文档 2,添加网站的起始页,我这里是main.htm

  8. Mac OS 10.12 - 如何关闭Rootless机制?

    一,进入恢复模式(Recovery):具体操作方法参见下面这篇博客: http://www.cnblogs.com/sunylat/p/6414697.html 二,关闭Rootless机制 1,选择 ...

  9. 639. Decode Ways II

    A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...

  10. 红黑树的实现——c++

    红黑树介绍参考上一篇. 1. 基本定义 enum RBTColor{RED, BLACK}; template <class T> class RBTNode{ public: RBTCo ...