ListView概述

来源:互联网 发布:大学生简历 知乎 编辑:程序博客网 时间:2024/04/28 12:18
记录自己成长的点滴
我在接触Android开发的时候,项目就在这样写了。如今随着年龄的老去,积淀了一些见解
基础不多讲了,直接讲讲自己开发中遇到的一些心得
ListView之--------ViewHolder
ViewHolder模式是ListView的一个提高效率的重要方法。它利用了视图缓存机制,避免了每次在调用getView()的时候都findViewById实例化,减少了一些不必要的实例化。这种模式已经没什么好说的了,它只需要在Adapter里定义一个内部类ViewHolder,并将布局中控件作为成员变量,在getView()的时候使用控件们。如下:

<pre name="code" class="java">public class MyAdapter extends BaseAdapter{    public List<String> mData;    public LayoutInflater mInflater;    此处省略一百个字...    @Override    public View getView(int position,View view, ViewGroup parent) {    ViewHolder holder == null;    //此处应该判断是否已经被创建    if(view == null )    {        holder = new ViewHolder();        //如果没有视图缓存,那么实例化一个出来,下面应该加在一个布局        view = mInflater.inflate(R.layout.xxx);        //接下来就是findVIewById没啥好说的        view.setTag(holder);     }      else      {                    //通过tag找到缓存的布局           holder = (ViewHolder)view.getTag();     }     //下面设置布局中控件要显示的视图,省略}    //此处是内部类ViewHolder,}

据说这种模式会提高50%多的效率,尤其在低端机上明显。

下面,是一些ListView的方法
视图间的分割divider="@null"(不设置分割线),可使用color填充分割线
dividerHeight分割线高度(有时间我会加入RecyclerView里,添加分割线的方法)

滚动条scrollbars=“null”隐藏滚动时的滚动条

item点击变色:默认的点击颜色太难看
listSelector=“#00000000”或者listSelector=“@color...”

设置显示的item项
mListView.setSelection(position);
在类中使用
mListView.smoothScrollBy(distance,duration);
mListView.smoothScrollBy(offset);
mListView.smoothScrollToPosition(position);

动态改变ListView
mData.add(“xxx”);
mAdapter.notifyDataSetChanged();

空布局
mListView.setEmptyView(findViewByID(R.id.empty));

遍历所有item
for(int i = 0; i < mListView.getChildCount(); i ++)
{
    View view = mListView.getChildAt(i);
}

滑动监听
OnTouchListener
监听ACTGION_DOWN,ACTION_MOVE,ACTION_UP这三个事件发生时的坐标,就可以根据坐标判断滑动方向。

OnScrollListener
OnScrollListener是AbsListView中的监听事件,它封装了很多与ListView相关的信息,使用起来更加灵活。其中有两个回调方法:onScrollStateChanged()和onScroll()。
onScrollStateChanged这个方法根据它的参数scrollState来决定其回调的次数,它有以下三种模式:
onScrollListener.SCROLL_STATE_IDLE:滚动停止的时候
onScrollListener.SCROLL_STATE_TOUCH_SCROLL:正在滚动的时候
onScrollListener.SCROLL_STATE_FLING:手指用力滑动时,由于惯性导致ListView继续滑动的状态
onScroll这个回调方法,会在滚动时一直回调,而方法中的
第二个参数firstVisibleItem:指的是当前能看见的第一个Item的ID(ID也是从0开始)
visibleItemCount指的是当前能看见的Item总数(当前能看见的Item,包括没有显示完整的Item)
totalItemCount指的是整个ListView里包含的Item总数。

原生的谷歌提供的控件真的非常丑陋,像IOS,在列表滑动完会有一个弹性的效果
1 0
原创粉丝点击