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);**
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值