zoukankan      html  css  js  c++  java
  • Android中常用的Adapter的种类和用法

    一、常用的adapter:

    1、BaseAdapter:基础数据适配器,它的主要用途是将一组数据传到例如ListView等UI显示组件,继承自接口类Adapter,由于是基础类型,所以自由度高, 可以修改的地方多

    2、SimpleAdapter:简单适配器,系统自定义了一些方法,可以重写这些方法

    3、ArrayAdapter:数据和UI一对一,传入数据源和布局文件,完成显示

    4、SimpleCursorAdapter:指向性适配器,指向数据库,可以方便地把数据库的内容以列表的形式展示出来

    二、用法:

      1、BaseAdapter:自己写构造体和方法,然后在getview中返回view到列表项绑定

      2、SimpleAdapter:

           格式:SimpleAdapter(Context  context, List<? extends Map<String, ?>>  data, int resource, String[]  from, int[] to)

           其中:context是上下文,data指map对象数组,resource指布局文件,from指data中map对象所对应的键名,to指resource中控件id

      3、ArrayAdapter:

           格式:ArrayAdapter<String>(Context context, int resource, int textViewResourceId, String[] objects)

           其中:context是上下文,resource指布局文件,textViewResourceId布局文件中绑定数据的控件id,objects数据数组

      4、SimpleCursorAdapter :

           格式:SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags)

           其中:context是上下文,layout指布局文件,c指数据cusor,from指数据库列名,to值绑定的控件id,flags标识当数据改变调用onContentChanged()的时候,是否通知ContentProvider数据进行了改变

    三、优化

     每种adapter都有getview方法返回对应的view到控件,如果复写该方法就能返回自定义view到控件上显示,例如这样:

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    { View item = mInflater.inflate(R.layout.list_item_layout, null); ((TextView) item.findViewById(R.id.showtext)).setText(data[position]); return item; }

      问题:上面的方法在少量的数据时不会有问题,但是大量的数据时,例如上百条,那消耗的系统资源就很大

      解决方法:减少view创建次数

      1、判断convertView是否已经创建,如果创建了就直接使用在进行数据绑定

    @override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        if (convertView == null) 
        {
            convertView = mInflater.inflate(R.layout.list_item_layout, null);
        }
     ((TextView) item.findViewById(R.id.showtext)).setText(data[position]);
     return convertView; 
    }

     这样写就减少了view的创建次数,提高了效率,但是数据的绑定还是每次都重新绑定,效率还是不高,所以为了更一步提高效率,就使用下边的方法

    2、ViewHolder的使用

     原理:在ViewHolder中提前定义好绑定的对象,这样一次绑定就能一直使用,不用重新创建和绑定,相比上面提高了效率

    class ChatListAdapter extends BaseAdapter
    {
     
    private class ViewHolder {   TextView showtext; }
    //各种省略
    public View getView(int position, View convertView, ViewGroup parent) {  ViewHolder holder;  if (convertView == null) {   convertView = mInflater.inflate(R.layout.list_item_layout, null);   holder = new ViewHolder();   holder.showtext= (TextView) convertView.findViewById(R.id.showtext);
    //将holder放入view的tag中,方便下次直接读取,类似于缓存的概念 convertView.setTag(holder);  }
    else {
    //从tag中读出holder来   holder
    = (ViewHolder) convertView.getTag();  } holder.showtext.setText(...);  return convertView; } }

      至此大数据的优化完成,系统效率提高不少

      

  • 相关阅读:
    Oracle体系结构之控制文件管理
    Oracle体系结构之参数文件管理
    Oracle体系结构之oracle密码文件管理
    Oracle备份恢复之Oracle11G R2用exp无法导出空表解决方法
    Oracle体系结构之OFM管理
    Oracle实例和Oracle数据库(Oracle体系结构)
    联机重做日志文件管理
    Oracle体系结构之控制文件管理
    (转)超全整理!Linux性能分析工具汇总合集
    (转)Linux 系统性能分析工具图解读(一、二)
  • 原文地址:https://www.cnblogs.com/hack132/p/4173367.html
Copyright © 2011-2022 走看看