前言android
列表,它做为一种很是重要的显示形式,不论是在web端仍是在移动平台上,都是一种很是友好的,功能强大的展示形式。在Android中,ListView就接管了这一重任。尽管在Android5.X时代,后起之秀RecyclerListView在不少地方会取代ListView。但这依然没法撼动ListView这个老大哥的地位。既然,ListView这么重要,我看十分有必要对ListView的用法作一个总结。web
正文缓存
我这里总结为9大点,听我细细给您道来。ide
Ⅰ、使用ViewHolder提升效率布局
利用ViewHolder来提升ListView的执行效率是有目共睹的,ViewHolder模式是充分利用ListView的View视图缓存机制,避免了ListView每次调用getView的时候,都须要调用getView方法,极大提高了ListView的运行效率,听说,这种方式能提高效率50%以上。下面,我经过具体的代码讲解这种用法。ViewHolder代码以下:spa
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; // 判断是否缓存 if (convertView == null) { holder = new ViewHolder(); // 经过LayoutInflater实例化布局 convertView = mInflater.inflate(R.layout.notify_item, null); holder.img = (ImageView) convertView.findViewById(R.id.imageView); holder.title = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(holder); } else { // 经过tag找到缓存的布局 holder = (ViewHolder) convertView.getTag(); } // 设置布局中控件要显示的视图 holder.img.setBackgroundResource(R.drawable.ic_launcher); holder.title.setText(mData.get(position)); return convertView; } public final class ViewHolder { public ImageView img; public TextView title; }
轻轻松松进行视图的缓存,提升了运行效率。运行效果为:设计
Ⅱ、设置条目间分隔线3d
在Android系统提供了divider(分割线背景值)与dividerHeight(分割线)属性来设置两个条目之间的分割线。例如我用下述代码就可以起到分割相邻条目的功能:code
android:divider="@android:color/darker_gray"
android:dividerHeight="10dp"
运行效果为:对象
Ⅲ、隐藏ListView滚动条
当咱们上滑下拉ListView时候,在右边的边缘都会出现滚动条显示您滚动的位置,当咱们把scrollbars属性设置为none的时候,你再滚动listview的时候,不再会出现滚动条。
Ⅳ、取消ListView的点击效果
当您点击ListView时候,系统会加上一个默认的点击效果。若是您想自定义的话只须要设置listSelector="xxx"以后,这样条目点击之后,就能变成您想要的效果。
Ⅴ、设置ListView须要显示第几项
ListView是以条目的形式来显示,默认是显示第一个条目。当你要显示具体的某个条目时,只须要调用setSelection(n)就能够,这个效果是瞬时完成的。
Ⅵ、动态修改ListView
当listView的绑定的数据发生了改变的改变,咱们固然能够经过从新设置adapter来,来从新获取一下数据。这样的用户体验很不友好啊,并且执行的效率很是的底下。其实,咱们杀鸡焉用牛刀,只须要调用adapter.notifyDataChanged()就能够,实现ListView动态更新。但这有一个前提,就是必须保证传递数据对象是同样的。请看代码:
mData.add("new");
mAdapter.notifyDataSetChanged();
这样就能实现ListView数据动态更新。运行效果以下:
Ⅶ、遍历ListView全部item
Android常见操做方法就是遍历ListView中全部条目,相应代码为:
for (int i = 0; i < mListView.getChildCount(); i++) { View view = mListView.getChildAt(i); }
Ⅷ、处理空ListView
ListView,本质是呈现数据列表的载体,当没有数据的展现的时候,根据良好的用户体验的设计规范,应该给予用户适当的提示,Android系统提供了setEmptyView()方法,当无数据时候,给予用户友好的提示。
Ⅸ、ListView滑动监听
对ListView的滑动监听,这是一个重要的技巧,看来咱们有必要在这里下一番寒彻骨 。咱们在这里主要是两个事件监听——OnTouchListener事件与OnScrollListener事件。
①、OnTouchListener事件
OnTouchListener是View自带的监听事件,咱们通常监听ACTION_DOWN(按下状态),ACTION_UP(抬起状态)与ACTION_MOVE(移动状态)三个状态的坐标,就可以判断ListView是上滑仍是下滑。相应事件以下:
View.OnTouchListener myTouchListener = 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事件
OnScrollListener事件是ListView自带的事件,他封装了不少与ListView相关信息,用起来十分灵活。咱们来看看它的使用方法。代码以下:
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState){ case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: break; case AbsListView.OnScrollListener.SCROLL_STATE_FLING: break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
咱们观察这个OnScrollListener事件中有两个回调方法——OnScrollStateChanged()和OnScroll()。
咱们来看看第一个方法OnScrollStateChanged(),这个方法根据scrollState(滚动状态)来肯定其回调的次数。其中ScrollState有三种模式:
OnScrollListener.SCROLL_STATE_IDLE——滚动中止时。
OnScrollListener.SCROLL_STATE_TOUCH_SCROLL——正在滚动时。
OnScrollListener.SCROLL_STATE_FLING——手指用力滚动时,即用户离开之后,即ListView因为惯性会继续滚动一段时间。
当用户用力滚动时,这个方法会回调3次,不然的话,只会回调2次。主要差异在于,是否触发了这个用力滚动事件。咱们对这个方法的通常的作法在于,设置一些标志Flag,来处理不一样的状态,供其余方法处理。
下面再来看看onScroll()这个回调方法,他在ListView滚动时一直回调,咱们要了解其余三个参数
firstVisibleItem——当前能看见的第一个Item的ID。
visibleItemCount——当前能看见的Item的总数。
totalItemCount——整个ListView的Item条目的数目。
须要指出的是,当前能看见的Item,包括没有显示完整的Item。经过这几个参数,能够作一些有用的判断,便可以判断这个ListView是否滚动到最后一行。判断思路在于当前可视的Item的ID加上当前可视Item的和是否等于Item的总数.也能够判断滚动方向,判断第一个Item的ID是否大于上次第一个可见ItemID。
总结
ListView使用方法,就是上面总结"九宗罪",但愿给你们有帮助。本人才疏学浅,但愿你们吐槽。