ListView概述

记录自己成长的点滴
我在接触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,在列表滑动完会有一个弹性的效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值