«

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

时间:2024-3-2 19:56     作者:韩俊     分类: Android


注解式框架的使用将会大大简化代码编写量,提升开发效率,主流的注解式框架有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包,确定即可。

 二.使用:

    直接上代码<br />

    <strong>public</strong> <strong>class</strong> MainActivity <strong>extends</strong> Activity {<br />

@Optional@InjectView(R.id.tv)

Button btn;

@Override

<strong>protected</strong> <strong>void</strong> onCreate(Bundle savedInstanceState) {

    <strong>super</strong>.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    ButterKnife.inject(<strong>this</strong>);


}


@OnClick(R.id.tv)

<br />

<strong>public</strong> <strong>void</strong> say(Button btn){

    Toast.makeText(<strong>this</strong>, &quot;你好&quot;, Toast.LENGTH_SHORT).show();

    btn.setText(&quot;ButterKnife&quot;);

}

}

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


   三.对adapter的支持

之前我们自定义的adapter会写成这种形式:

    @Override<br />

<strong>public</strong> View getView(<strong>int</strong> position, View convertView, ViewGroup parent) {

    // <strong>TODO</strong> Auto-generated method stub

    ViewHolder holder = <strong>null</strong>;

    <strong>if</strong> (holder == <strong>null</strong>) {

        convertView = LayoutInflater.from(mcontext).inflate(

                R.layout.activity_main, <strong>null</strong>);

        holder = <strong>new</strong> ViewHolder();

        holder.btn = (Button) convertView.findViewById(R.id.tv);

        convertView.setTag(holder);

    } <strong>else</strong> {

        holder = (ViewHolder) convertView.getTag();

    }

    holder.btn.setText(&quot;更改&quot;);

    <strong>return</strong> convertView;

}

<strong>class</strong> ViewHolder {

    Button btn;
}

----------------------华丽丽的分割线-------------------------------

加入ButterKnife后,adapter只需进行很小的修改即可,代码如下

@Override
<strong>public</strong> View getView(<strong>int</strong> position, View convertView, ViewGroup parent) {
    // <strong>TODO</strong> Auto-generated method stub
    ViewHolder holder = <strong>null</strong>;

    <strong>if</strong> (holder == <strong>null</strong>) {
        convertView = LayoutInflater.from(mcontext).inflate(
                R.layout.activity_main, <strong>null</strong>);
        holder = <strong>new</strong> ViewHolder(convertView);
        holder.btn = (Button)convertView.findViewById(R.id.tv);
        convertView.setTag(holder);
    }<strong>else{</strong>
        holder = (ViewHolder)convertView.getTag();
    }
    holder.btn.setText(&quot;更改&quot;);
    <strong>return</strong> convertView;
}

<strong>static</strong> <strong>class</strong> ViewHolder{
    @InjectView(R.id.tv)
    Button btn;
    <strong>public</strong> ViewHolder(View view){
        ButterKnife.inject(view);
    }
} 

ViewHolder声明为了静态的,holder = new ViewHolder中传入了 convertView。以上就是简单的ButterKnife的使用方法

        <p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>

标签: android

热门推荐