注解式框架ButterKnife的用法及在adapter中使用的优化

         注解式框架的使用将会大大简化代码编写量,提升开发效率,主流的注解式框架有Dagger,ButterKnife,AndrodAnnotations。AndrodAnnotations配置麻烦,需要在项目清单里注册生成的子类。反射机制会占用资源内存和耗时。Dagger采用预编译技术,高效,但是对View绑定操作注解不是很方便。
              ButterKnife用起来方便,使用简单,这里主要介绍它的使用。  到官网下载jar包,ButterKnife也已经托管到github上, http://jakewharton.github.io/butterknife/
            一.配置:
    下载jar包放到libs中,配置eclipse,右键项目properties->java Compiler->Annotation Procession->勾一下Enable project special settings其他的就会自动勾上了,Factory path勾上 Enable project special settings,Add jars选中刚才导入的jar包,确定即可。
               二.使用:
         直接上代码
          public   class  MainActivity  extends  Activity {
    @Optional@InjectView(R.id.tv)
    Button btn;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);

    }

    @OnClick(R.id.tv)
    
    public void say(Button btn){
        Toast.makeText(this"你好", Toast.LENGTH_SHORT).show();
        btn.setText("ButterKnife");
    }
}
很简单吧,需要注意的是,如果click事件还有其他的组件,则声明为 @OnClick ({R.id. tv,R.id.tv2} )这种方式即可,在使用case来进行判断,@Optional是以防没有这个id,防止崩溃使用的,其他的事件如长按,选中等也都有相关的方法。

        三.对adapter的支持
    之前我们自定义的adapter会写成这种形式:
          @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder = null;
        if (holder == null) {
            convertView = LayoutInflater.from(mcontext).inflate(
                    R.layout.activity_mainnull);
            holder = new ViewHolder();
            holder.btn = (Button) convertView.findViewById(R.id.tv);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.btn.setText("更改");
        return convertView;
    }
    class ViewHolder {
        Button btn;
    }
----------------------华丽丽的分割线-------------------------------
    加入ButterKnife后,adapter只需进行很小的修改即可,代码如下
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder = null;
        if (holder == null) {
            convertView = LayoutInflater.from(mcontext).inflate(
                    R.layout.activity_mainnull);
            holder = new ViewHolder(convertView);
            holder.btn = (Button)convertView.findViewById(R.id.tv);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }
        holder.btn.setText("更改");
        return convertView;
    }
    
    static class ViewHolder{
        @InjectView(R.id.tv)
        Button btn;
        public ViewHolder(View view){
            ButterKnife.inject(view);
        }
    }  
ViewHolder声明为了静态的,holder = new ViewHolder中传入了 convertView。 以上就是简单的ButterKnife的使用方法

    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值