【第22期】观点:IT 行业加班,到底有没有价值?

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高手进阶——Adapter深入理解与优化

Android高手进阶——Adapter深入理解与优化     一般是针对包含多个元素的View,如ListView,GridView,ExpandableListview,的时候我们是给其...

Adapter深入理解与优化

一般是针对包含多个元素的View,如ListView,GridView,ExpandableListview,的时候我们是给其设置一个Adapter。Adapter是与Vi

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

adapter layout 优化

Android高手进阶:Adapter深入理解与优化 一般是针对包含多个元素的View,如ListView,GridView,ExpandableListview,的时候我们是给其设置一个Adapt...

ListView 编程: 如何优化自定义 Adapter

使用自定义的 Adapter,需要优化,说到底是优化我们自定义的适配器类! <span s

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

一般是针对包含多个元素的View,如ListView,GridView,ExpandableListview,的时候我们是给其设置一个Adapter。Adapter是与View之间提供数据的桥梁,也是...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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