ButterKnife 的简单使用

 

ButterKnife 可以省去很多的findViewById 代码

GitHub地址:https://github.com/JakeWharton/butterknife

 

在 Android Studio 中的配置

dependencies {
  implementation 'com.jakewharton:butterknife:8.8.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
 

到此配置已完成,

Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind 
Fragment ButterKnife.bind(this, mRootView); 
属性布局不能用private or static 修饰,否则会报错  @BindView fields must not be private or static.

 

在Activity中绑定使用

public class LoginActivity extends AppCompatActivity{
    @BindView(R.id.email)
    public AutoCompleteTextView mEmailView;
    @BindView(R.id.password)
    public EditText mPasswordView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);
    }
}

在Fragment中使用

public class ButterknifeFragment extends Fragment{  
    private Unbinder unbinder;  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
                             Bundle savedInstanceState) {  
        View view = inflater.inflate(R.layout.fragment, container, false);  
        //返回一个Unbinder值(进行解绑),注意这里的this不能使用getActivity()  
        unbinder = ButterKnife.bind(this, view);  
        return view;  
    }  

    /** 
     * onDestroyView中进行解绑操作 
     */  
    @Override  
    public void onDestroyView() {  
        super.onDestroyView();  
        unbinder.unbind();  
    }  
}

在Adapter 中使用

public class DemoListAdapter extends BaseAdapter {
        public DemoListAdapter() {
            super();
        }
        @Override
        public View getView(int index, View convertView, ViewGroup parent) {
            MyViewHolder myViewHolder ;
            if (convertView == null) {
                convertView = View.inflate(getActivity(), R.layout.list_info_item, null);
                myViewHolder= new MyViewHolder(convertView);
                convertView.setTag(myViewHolder);
            }else {
                myViewHolder = (MyViewHolder) convertView.getTag();
            }
            myViewHolder.title.setText(DEMOS[index].title);
            myViewHolder.desc.setText(DEMOS[index].desc);
            return convertView;
        }
        
        @Override
        public int getCount() {
            return DEMOS.length;
        }

        @Override
        public Object getItem(int index) {
            return DEMOS[index];
        }

        @Override
        public long getItemId(int id) {
            return id;
        }

        class MyViewHolder {
            @BindView(R.id.title)  TextView title;
            @BindView(R.id.desc)  TextView desc;
            public MyViewHolder(View view) {
                ButterKnife.bind(this, view);
            }
        }
    }

绑定监听事件

@OnClick(R.id.email_sign_in_button)
public void attemptLogin() {
}

 绑定多个监听事件

@OnClick({R.id.button1 , R.id.button2, R.id.button3})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.button1:
                break;
            case R.id.button2:
                break;
            case R.id.button3:
                break;
        }
    }

 

绑定事件使用R2的绑定id 

这个没有验证出来,我使用的是最新的,但是没有R2 这个东西,记录说是8.7.0 之后就有的,有待我再来确认

 

@BindView

    @BindView(R.id.tv_html)
    public TextView tv_html ;

@BindViews 

错误提示 @BindViews must be a List or array

   @BindViews({R.id.button1 , R.id.button2})
    public List<Button> btnList ;

@BindArray  绑定string里面array数组;@BindArray(R.array.city ) String[] citys ;

@BindBitmap 绑定图片资源为Bitmap;@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;

@BindString 绑定一个String id为一个String变量;@BindString( R.string.app_name ) String meg;

@BindColor  绑定color;@BindColor(R.color.colorAccent) int black;

@BindDimen  绑定Dimen;@BindDimen(R.dimen.borth_width) int mBorderWidth;

@BindDrawable   绑定Drawable;@BindDrawable(R.drawable.test_pic) Drawable mTestPic;

@BindFloat  绑定float

@BindInt  绑定int

@BindBool  绑定boolean值 


 

ButterKnife的代码混淆

在混淆文件中,添加如下代码:

-keep class butterknife.** { *; }  
-dontwarn butterknife.internal.**  
-keep class **$$ViewBinder { *; }  

-keepclasseswithmembernames class * {  
    @butterknife.* <fields>;  
}  

-keepclasseswithmembernames class * {  
    @butterknife.* <methods>;  
}

 

安装插件

 

安装完插件后重启

插件的使用

1. 将光标放在layout布局文件名字上

2.鼠标右边选择Generate 菜单

3.选择Generate Butterknife Injections 菜单

如果没有出现这个菜单就是光标选择位置不对,需要放在布局文件名字上

4. 根据需要选择相应的配置

5. 下面是自动生成的代码

在ondestroyview中我使用的是fragment 会出现一个unbind 方法,需要解除绑定

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值