Android群英传学习——ListView优化
来源:互联网 发布:dnf提示框源码 编辑:程序博客网 时间:2024/05/22 11:30
常用优化技巧
使用ViewHolder
ViewHolder利用了ListView的视图缓存机制,避免每次getView的时候都去重新实例化对象,提高效率。
设置项目分割线
使用android:divider属性设置分割线 设置@null为透明分割线
dividerHeight属性设置分割线的高度
隐藏滚动条
android:scrollbars=”none”
取消Item点击效果
android:itemSelector=”#00000000” //透明色
设置显示第几项
listView.setSelection(N);
动态添加Item
当Adapter中设置的List元素增添之后
可以使用notifyDataSetChange()来刷新数据。
如果List引用和以前的不一致,是无法刷新的。
设置空View
在ListView同级设置一个ImageView。
使用listView.setEmpty(view)即可。
滑动监听
onTouchListener
onScrollerListener
firstVisibleItem 第一个显示的View的编号
lastVisibleItem 上次第一个显示的View的编号
visibleItemCount 显示的Item个数
totalItemCount 总共的Item个数
判断到了最后一行:
firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0
ListView常用拓展
具有弹性的ListView
继承ListView ,重写overScrollBy方法,修改super中的参数maxOverScrollY为一个具体的数值,就可以给ListView添加指定高度的弹性效果了。
自动显示,隐藏布局的ListView
通过使用Toolbar+重写listView的onTouch方法可以实现
lv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: mFirst = motionEvent.getY(); break; case MotionEvent.ACTION_MOVE: mCurrent = motionEvent.getY(); Log.d("lfz",mCurrent+""); if(mCurrent - mFirst > mTouchSlop){ direction = 0; //down }else if(mFirst - mCurrent > mTouchSlop){ direction = 1; //up } if(direction == 1){ if(mShow){ toolbarAnim(0); //显示 mShow = !mShow; } }else if(direction == 0){ if(!mShow){ toolbarAnim(1); //隐藏 mShow = !mShow; } } break; } return false; } }); private void toolbarAnim(int i) { if(mAnimator != null && mAnimator.isRunning()){ mAnimator.cancel(); } if(i == 1){ //显示 mAnimator = ObjectAnimator.ofFloat(toolbar,"translationY",toolbar.getTranslationY(),0); }else{ //隐藏 mAnimator = ObjectAnimator.ofFloat(toolbar,"translationY",toolbar.getTranslationY(),-toolbar.getHeight()); } mAnimator.start(); }
动态改变ListView布局
在Item被点击的时候有一个focus效果,可以使用不同ItemType来完成效果。
/** * Created by Administrator on 2017/10/9. * 实现不同点击效果的Adapter */public class FocusAdapter extends BaseAdapter { private List<String> mData; private Context context; private int mCurrentItem = -1; public void setCurrentItem(int mCurrentItem) { this.mCurrentItem = mCurrentItem; } public FocusAdapter(List<String> mData, Context context) { this.mData = mData; this.context = context; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int i) { return mData.get(i); } @Override public long getItemId(int i) { return i; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { return mCurrentItem == position?1:0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder; if(view == null){ viewHolder = new ViewHolder(); switch (getItemViewType(i)) { case 0: view = LayoutInflater.from(context).inflate(R.layout.item_normal, viewGroup, false); break; case 1: view = LayoutInflater.from(context).inflate(R.layout.item_focus, viewGroup, false); break; } viewHolder.tv_title = view.findViewById(R.id.item_title); view.setTag(viewHolder); }else{ viewHolder = (ViewHolder) view.getTag(); } viewHolder.tv_title.setText(mData.get(i)); return view; } class ViewHolder{ TextView tv_title; }}
- Android群英传学习——ListView优化
- Android群英传——第四章ListView常用优化
- Android群英传学习笔记——ListView使用技巧
- Android群英传学习——第四章、ListView使用技巧
- android群英传笔记——ListView常用优化技巧(二、ListView的滑动监听)
- Android群英传知识点回顾——第四章:ListView常用优化技巧
- android群英传笔记——ListView常用优化技巧(一、使用ViewHolder模式提高效率)
- ListView常用优化技巧(Android群英传)
- 性能优化——Android群英传
- Android群英传学习笔记——自动显示、隐藏布局的ListView
- Android群英传笔记——第四章:ListView使用技巧
- Android群英传——第四章ListView滑动监听
- Android群英传——第四章具有弹性的ListView
- Android群英传笔记——第四章:ListView使用技巧
- Android群英传笔记——第十章:Android性能优化
- Android群英传笔记——第十章:Android性能优化
- Android群英传学习笔记——Android Scroll 分析
- Android群英传学习——第五章、Android Scroll分析
- 大数据杂谈之 我来自两天后的世界
- PHP实现文件下载断点续传详解
- C++判断两个字符串是否互为旋转词
- 自定义view画圆
- nyoj845无主之地1
- Android群英传学习——ListView优化
- c语言关键字(上)
- 了解MVC、MVP于MVVM的区别
- Pandas时间序列
- Spring源码之JdbcTemplate中的坑,你中招了吗
- 活用宏定义
- LeetCode 338
- 简单的通信(QUdpSocket、 QTcpSocket、QWebSocket)-----Qt网络
- 自定义View+点击生成随机数