导航

listview与baseadapter

Posted on 2015-04-13 22:33  一个博客  阅读(370)  评论(0)    收藏  举报

  最近listview结合baseadapter运用较多,对二者也慢慢变得熟悉起来,在这里做一个小小总结。

  listview属于典型的适配器控件,适配器控件派生自android.widget.AdapterView,一般由三部分组成,控制视图、数据源、适配器对象。适配器对象的作用就是:构造列表项控件,并将数据项绑定到列表项控件中,baseadapter是一种较为常用且功能强大的适配器,关键在于getView()方法的实现;

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        return null;
    }

在适配器的定制过程中,开发者需要明确列表项的数量,并确定每个列表项对应的数据内容,同时需要为列表项构造列表空间对象,并将对应的列表项数据绑定到列表项控件上。

  按照这样的方式构造适配器,当列表项很多事会导致子控件的数量急剧膨胀,耗费大量内存,甚至崩溃。android的适配器控件在设计时在getView函数中有一个输入函数convertView,用于缓存最近一个失去可视状态的列表项空间对象。如下图

 

convertView就是用于缓存失去可视状态的列表项控件,通过getView函数会传到开发者手里,开发者可以复用这个控件对象重新绑定即将可是的列表项对象数据,从而避免了构造新列表项控件的开销。结合ViewHolder将更加高效(避免重复getViewByid()),也即整个listview基本只存在与可视条目数目相等的item,极大减小了内存消耗。