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

来源:互联网 发布:网络翻墙英语怎么说 编辑:程序博客网 时间:2024/06/15 02:22
        注解式框架的使用将会大大简化代码编写量,提升开发效率,主流的注解式框架有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
原创粉丝点击