Adapter的优化

原创 2017年01月03日 17:55:18

Adapter的优化

在这里我主要讲自定义adapter的优化:

  • viewHolder类, 实现控件的复用
  • 将点击事件都传出去,交给实现这个adapter的类处理
  • 定义一个传递数据的方法
  • layoutInflater的实例化

ViewHolder类

  • 先将布局文件中所有的view 声明
  • 在adapter的getView方法里这样写:

     ViewHolder vh = null;
          if (convertView == null) {
                vh = new ViewHolder();
                convertView = layoutInflater.inflate(
                        R.layout.layput_customer_item, null);
                vh.nameText = (TextView) convertView
                        .findViewById(R.id.tv_user_name);
                vh.nameText.setTag(position);  `
                convertView.setTag(vh);
          } else {
            vh = (ViewHolder) convertView.getTag();
    }
    

定义新的接口

尽量不在adapter里做数据处理,因为adapter主要负责展示数据。而且adapter的数据是来源于调用他的类。比较好的处理方式是将要点击之后的操作扔出去。

具体的写法

adapter 定义列表接口:

 public interface SetOnClickListener{
        void onNameClick(int position);
    }
    // 声明
    private SetOnClickListener l; 
    // 外部要实现这个接口时需要赋值  
    public void setListener(SetOnClickListener l) {
        this.l = l;
    }
    // adapter内部 某一个控件点击事件处理交给定义的接口
      vh.nameText.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    int pos = (int) v.getTag();
                    if(l !=  null){
                        l.onNameClick(pos);
                    }
                }
            });



   // 外部调用adapter时可以像下面这么写
   ContactAdapter contactAdapter = new ContactAdapter(contacts, getActivity());
                        **contactAdapter.setListener(CustomerFragment.this);**
                        contactListView.setAdapter(contactAdapter)

layoutInflater的实例化

layoutlnflater的实例化,以前我的习惯就直接放在getView方法里,实际上那样会每次都会生成新的对象。 getView()方法是每次都会绘制子view执行的,所以要尽可能的减少代码的执行。我们可以把实例化的代码放在adapter 的构造方法里。下面的这个代码块其实还可以细分,那就是把数据集合拿出来,专门定义一个方法去传递数据。

  public ContactAdapter(List<Contact> aNameList,Context context) {
        contactListData = aNameList;
        this.context = context;
        **layoutInflater = LayoutInflater.from(context);**
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android-ListView适配器BaseAdapter的使用和优化

Android-ListView适配器BaseAdapter的使用 这是BaseAdapter的相应的方法属性。 像SimpleAdapter和ArrayAdapter都是继承于BaseAdapt...
  • ACM_TH
  • ACM_TH
  • 2016年04月12日 09:57
  • 3182

【Android优化】最强ListView优化方案

convertView重用,ViewHolder优化,图片加载优化,onClickListener处理,减少Item View的布局层级,adapter中的getView方法尽量少使用逻辑,adapt...
  • s003603u
  • s003603u
  • 2015年08月03日 23:35
  • 6294

ListView的adapter性能优化

我们常用ListView,甚至GridView的编写方式也与ListView非常类似,而且GridView往往加载图片,性能问题尤为明显。在ListViewAdapter中使用convertView以...
  • aqiao58
  • aqiao58
  • 2013年09月12日 11:56
  • 1025

ViewHolder和Adapter打造万能适配器(优化)

  • 2016年06月24日 14:09
  • 631KB
  • 下载

利用ViewHolder优化自定义Adapter的典型写法

  • 2014年07月16日 17:07
  • 1.41MB
  • 下载

Google官网上的一个Adapter优化的范例

  • 2014年07月16日 17:42
  • 2MB
  • 下载

ListView的优化使用-抽取ViewHolder以及adapter类

  • 2016年12月30日 17:43
  • 4.74MB
  • 下载

Adapter,Spinner,ListView及其优化

  • 2017年01月20日 09:07
  • 1.5MB
  • 下载

Android高手进阶:Adapter深入理解与优化

2014-07-15 17:17 佚名 eoeandroid 字号:T | T 一般是针对包含多个元素的View,如ListView,GridView,ExpandableListview,...
  • lbdreaming
  • lbdreaming
  • 2015年05月20日 17:16
  • 574

android listView 重写Adapter方法getView的性能优化问题

1.为什么要重写Adapter 的getView方法      为什么要重写getView方法 可以看这里   android listView滚动时checkBox的状态不会保存的问题    2.在...
  • dxswzj
  • dxswzj
  • 2013年08月31日 00:47
  • 10474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Adapter的优化
举报原因:
原因补充:

(最多只允许输入30个字)