之前有总结过关于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上下可以弹动了。

@Override
protected 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

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

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. MySQL性能调优与架构设计——第12章 可扩展设计的基本原则

    第12章 可扩展设计的基本原则 前言: 随着信息量的飞速增加,硬件设备的发展已经慢慢的无法跟上应用系统对处理能力的要求了.此时,我们如何来解决系统对性能的要求?只有一个办法,那就是通过改造系统的架构体 ...

  2. Lucene.net 基本示例 《第一篇》

    Lucene.net是java平台搜索插件Lucene的移植版.它的主要用于开发搜索引擎,站内搜索等. 开篇之前,写个最简单的DEMO,让自己先体验下Lucene.net的魅力,顺便搭建环境. sta ...

  3. HDU1181 变形课(DFS) 2016-07-24 13:31 73人阅读 评论(0) 收藏

    变形课 Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒 ...

  4. OpenGL模型视图变换、投影变换、视口变换的理解

    OpenGL中不设置模型,投影,视口,所绘制的几何图形的坐标只能是-1到1(X轴向右,Y轴向上,Z轴垂直屏幕向外). 产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对 ...

  5. hdu 1877

    题目 一个进制转换的题,注意0+0的情况 代码如下: #include <cstdio> int d[1000]; void solve(int n,int base) { int p = ...

  6. LinqToHubble介绍及简单使用步骤——LinqToHubble是对HubbleDotnet的封装

    或许你还你知道HubbleDotnet,下面简单对HubbleDotnet坐下介绍. HubbleDotNet是由盘古分词作者——eaglet 开发的一个基于.net framework 的开源免费的 ...

  7. LeetCode149:Max Points on a Line

    题目: Given n points on a 2D plane, find the maximum number of points that lie on the same straight li ...

  8. 初识powershell、nuget powershell 调试

    初识powershell.nuget powershell 调试 补充 此文仅当做powershell的初步认识体验,关于nuget包里此脚本的使用官方已在vs2017停止支持,请看此文文末 前言 老 ...

  9. net 串口通讯 网口通讯(Socket)

    1.串口通讯 2.网口(Socket) 源码下载:源码附件

  10. keil小技能随用随定义

    大家都知道在C语言编程时一般都是先定义再使用这个变量的,不允许在语句的后面再定义,但是有时候我们会在KEIL中发现有些人使用变量就在语句后定义,这时我们自己去尝试却发现总是失败,这是为何呢? 原来是我 ...