之前有总结过关于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

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

最新文章

  1. ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑
  2. filter应用案例三:解决全站编码问题
  3. (状压) Brush (IV) (Light OJ 1018)
  4. &quot;渴了么&quot;用户场景分析
  5. iOS tableview 优化总结
  6. weak nonatomic strong等介绍(ios)
  7. El表达式和fn函数一起使用
  8. uva 10963 - The Swallowing Ground
  9. auto_ptr 要点解析
  10. [Git]05 如何使用分支
  11. Java 垃圾回收算法
  12. Zookeeper与Kafka基础概念和原理
  13. python基础知识2---核心风格
  14. Python 进程管理工具 Supervisor 使用教程
  15. CMake的一些正确姿势
  16. The Little Prince-12/09
  17. Linux - APT包管理
  18. pthread_join与pthread_detach细节问题
  19. Ios之网络编程NSURLConnection
  20. 关于Unity中GrabPass截屏的使用和Shader的组织优化

热门文章

  1. GetDocument missing storage-class or type specifiers的解决方法
  2. ios开发 ad hoc怎么用
  3. Android-ColorsUtil工具类
  4. 笔记本U盘安装CentOS 7
  5. NET Core2.1 WEB老项目迁移
  6. .net core webapi+EF Core
  7. 如何使用socket进行java网络编程(二)
  8. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column &#39;img&#39; at row 1故障
  9. FreePascal - CodeTyphon交叉编译,在一个操作系统生成各个操作系统可以运行的程序!
  10. Good Bye 2017(送命场)