Adapter的优化

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);**
    }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014246372/article/details/53996617
文章标签: 优化
个人分类: android基础知识
上一篇带checkBox的ListView全选和取消。
下一篇android 动画
想对作者说点什么? 我来说一句

Adapter,Spinner,ListView及其优化

2017年01月20日 1.5MB 下载

没有更多推荐了,返回首页

关闭
关闭