《Android群英传》读书笔记(2)第四章:ListView常用优化技巧
来源:互联网 发布:淘宝在线登录 编辑:程序博客网 时间:2024/05/16 17:38
1.使用ViewHolder模式提高效率
ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次调用getView()
时都去通过findViewById()
实例化控件
使用ViewHolder
非常简单,只需要在自定义的Adapter
中定义一个内部类,并将布局中的控件作为成员变量,代码如下:
public final class ViewHolder{ public ImageView img; public TextView text;}
然后在getView()
方法中通过视图缓存机制重用即可:
@Overridepublic View getView(int position,View convertView,ViewGroup parent){ ViewHolder holder = null; //先判断convertView是否为null holder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item.xml,null); holder.img = (ImageView)convertView.findViewById(R.id.img); holder.text = (TextView)convertView.findViewById(R.id.text); convertView.setTag(holder); }else{ holder = (ViewHolder)convertView.getTag(); } holder.img.setBackgroundResource(R.drawable.ic_launcher); holder.text.setText(mData.get(position)); return convertView;}
2.设置项目分割线
使用如下代码为ListView设置分割线
android:divider="@android:color/darker_gray"android:dividerHeight="10dp"//把分割线设置为透明android:divider="@null"
同样也可以设置drawable资源为分割线。
3.隐藏ListView的滚动条
android:scrollbars="none"
4.取消ListView的点击效果
android:listSelector="#00000000"
5.设置ListView需要显示在第几项
listView.setSelection(position);
这个方法类似于scrollTo()
是瞬间完成移动的,可以使用下面的代码完成平滑移动:
listView.smoothScrollBy(distance,duration);listView.smoothScrollByOffset(offset);listView.smoothScrollToPosition(index);
6.动态修改ListView
mDatas.add("new");adapter.notifyDataSetChanged();
要注意的是mDatas必须指向和Adapter中引用的相同的mDatas。
7.遍历ListView中所有的item
for(int i = 0;i < mAdapter.getItemCount();i++){ View item = mListView.getChildAt(i);}
8.处理空的ListView
当ListView中的数据为空时可以通过setEmptyView()
方法来指定无数据时的提示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent"/> <ImageView android:id="@+id/empty_view" android:src="@mipmap/ic_launcher" android:layout_width="match_parent" android:layout_height="match_parent"/></FrameLayout>
上面是布局文件
在代码中可以通过以下方式设置emptyView:
listView.setEmptyView(findViewById(R.id.empty_view));
9.ListView滑动监听
有两种方式来实现滑动监听分别是onTouchListener
和onScrollListener
(1)onTouchListener实现
通过监听onTouchListener中的ACTION_DOWN、ACTION_MOVE、ACTION_UP三个事件来判断滑动状态:
mListView.setOnTouchListener(new View.onTouchListener(){ @Override public boolean onTouch(View v,MotionEvent event){ String action = event.getAction(); switch(action){ case MotionEvent.ACTION_DOWN: //触摸时操作 break; case MotionEvent.ACTION_MOVE: //移动时操作 break; case MotionEvent.ACTION_UP: //离开时操作 break; default: break; } return true; }});
(2)`onScrollListener()`实现onScrollListener是AbsListView中的监听事件,封装了很多与ListView相关的信息,下面是一般用法:
mListView.setOnScrollListener(new OnScrollListener(){ @Override public void onScrollStateChanged(AbsListView view,int scrollState){ switch(scrollState){ case OnScrollListener.SCROLL_STATE_IDLE: //滑动停止时 break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: //正在滑动 break; case OnScrollListener.SCROLL_STATE_FLING: //手指抛动时 break; default: break; } } @Override public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount){ //滚动时调用 if(firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0){ //滑动到最后一行 } if(firstVisibleItem > lastVisibleItemPosition){ //上滑 }else if(firstVisibleItem < lastVisibleItemPosition){ //下滑 } }});
0 0
- 《Android群英传》读书笔记(2)第四章:ListView常用优化技巧
- 《Android群英传》读书笔记(3)第四章:ListView常用拓展
- Android群英传读书笔记第四章 (ListView使用技巧)
- Android群英传知识点回顾——第四章:ListView常用优化技巧
- Android群英传——第四章ListView常用优化
- ListView常用优化技巧(Android群英传)
- android群英传笔记--第四章--ListView使用技巧(一)
- android群英传笔记--第四章--ListView使用技巧(二)
- 第四章ListView使用技巧(Android群英传)
- android群英传笔记——ListView常用优化技巧(二、ListView的滑动监听)
- Android群英传笔记——第四章:ListView使用技巧
- Android群英传第四章笔记·ListView使用技巧
- Android群英传笔记——第四章:ListView使用技巧
- Android群英传学习——第四章、ListView使用技巧
- android 群英传读书笔记---listview使用技巧(一)
- android群英传读书笔记---ListView使用技巧(二)
- 《Android群英传》读书笔记4.ListView使用技巧
- android群英传笔记——ListView常用优化技巧(一、使用ViewHolder模式提高效率)
- 各种排序算法的分析及java实现
- 细说单例在android中的应用
- 网页中图片旋转的几种实现方式
- activemq集群
- mysql悲观锁总结和实践
- 《Android群英传》读书笔记(2)第四章:ListView常用优化技巧
- Elasticsearch Reference [2.x] scroll
- 使用移动广告平台横幅广告自动刷新教程
- 8大排序算法图文讲解
- KMP/扩展KMP
- 我的iOS学习历程 - UIView动画与CAAnimation动画详解
- <unable to get file lock, will retry ...>进程重复启动
- Nazo小游戏(1-10关)
- 内存管理