Android之ListView的使用技巧
之前有总结过关于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的使用技巧的更多相关文章
- Android之ListView常用技巧
ListView是一个非常常用的列表控件,虽然在5.x时代ListView的风头正在逐渐的被RecyclerView抢去,但是ListView的使用范围依然十分广泛. 接下来的ListView的常用技 ...
- Android开发——ListView使用技巧总结(二)
0. 前言 Android中的ListView是用的比较多的控件之一,在上一篇Android开发--ListView使用技巧总结(一)中对ListView的ViewHolder机制.优化卡顿方式以及 ...
- Android开发——ListView使用技巧总结(一)
)还有一点就是要控制异步任务的执行频率,因为当用户频繁的上下滑动,会瞬间产生上百个异步任务,会带来无意义的大量的UI更新操作,因此可以考虑在列表滑动时停止进行异步任务,直到列表停下来. //判断列表的 ...
- Android群英传知识点回顾——第四章:ListView常用优化技巧
4.1 ListView常用优化技巧 4.1.1 使用ViewHolder模式提高效率 4.1.2 设置项目间分割线 4.1.3 隐藏ListView的滚动条 4.1.4 取消ListView的Ite ...
- Android 实现ListView异步加载图片
ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; ...
- Android—万能ListView适配器
ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...
- Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)
昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...
- Android之ListView性能优化——一行代码绑定数据——万能适配器
如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...
- Android中ListView的几种常见的优化方法
Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...
随机推荐
- spring + rs + RocketMQ 【精】
cxf-rs-rocketmq 项目地址:见git │ pom.xml │ └─src ├─main │ ├─java │ │ └─cn │ │ └─zno │ │ ├─pojo │ │ │ Rece ...
- Ubuntu16.04安装PostgreSQL并使用pgadmin3管理数据库_图文详解
版权声明:本文地址http://blog.csdn.net/caib1109/article/details/51582663 欢迎非商业目的的转载, 作者保留一切权利 apt安装postgresql ...
- ( KMP 求循环节的个数)Power Strings -- poj -- 2406
链接: http://poj.org/problem?id=2406 Power Strings Time Limit:3000MS Memory Limit:65536KB 64bi ...
- Oracle实现递归查询
前几天在开发的过程中遇到一个递归查询的问题,java代码大致是这样的: // 递归得到四级机构对象 public UserManagerDept getuserManagerDeptBy(String ...
- Codeforces777D Cloud of Hashtags 2017-05-04 18:06 67人阅读 评论(0) 收藏
D. Cloud of Hashtags time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- STL---规范
1. "插入操作" 新插入的数据位于‘哨兵迭代器“所指的节点的前方,并返回指向新插入位置的‘迭代器(指针)“.这是STL对于插入操作的标准规范. 2.链表操作 对于一个链式表,如果 ...
- nodejs express hi-cms
今天看一下hi-cm是怎么写的,理解一下流程,看一些亮点 它使用express3.x写的 1.app.set, app.get app.set('port', 3000); app.get('port ...
- L-BFGS
L-BFGS算法比较适合在大规模的数值计算中,具备牛顿法收敛速度快的特点,但不需要牛顿法那样存储Hesse矩阵,因此节省了大量的空间以及计算资源.本文主要通过对于无约束最优化问题的一些常用算法总结,一 ...
- StructureMap依赖注入
IOC:控制反转,是一种设计模式.一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制:第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系.他们的依赖关系 ...
- 挂载Linux云主机硬盘到本地计算机
现在移动硬盘已经是每个人的生活必需品了,当然网络也是我们生活的必需品,我们现在就是要用网络存储代替硬盘存储,当然再实际使用过程中需要考虑到以下两个问题: 网络延迟 云主机磁盘IO 以上两个关键 ...