学习ButterKnife 8.4.0

ButterKnife的GitHub: https://github.com/JakeWharton/butterknife

参考博客:

项目添加 http://blog.csdn.net/skeeing/article/details/52384025
详细使用说明 http://blog.csdn.net/skeeing/article/details/52386438

本文是以ButterKnife 8.4.0为基础,记录学习的过程,如果有错误,求指正。
一. 添加到项目

在app的build.gradle中添加以下依赖就可以

dependencies {
  compile 'com.jakewharton:butterknife:8.4.0'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}
二. 使用ButterKnife

在activity中使用需要绑定, 建议在BaseActivity中绑定

注意:在8.4.0中已经不需要解绑了 ButterKnife.unbind()

baseActivity.png

注意:ButterKnife.bind()需要在setContentView()之后进行绑定

再让MainActivity 继承自BaseActivity,接下来修改布局MainActivity的布局来练习ButterKnife的使用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"    
xmlns:tools="http://schemas.android.com/tools"   
android:id="@+id/activity_main"    
android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:orientation="vertical"   
tools:context="com.panji.studybutterknife.MainActivity">    
<TextView        
android:id="@+id/tv_hello"        
android:layout_width="wrap_content"        
android:layout_height="wrap_content"        
android:text="Hello World!" />    
<Button        
android:id="@+id/bt_1"        
android:layout_width="match_parent"        
android:layout_height="50dp"        
android:text="这是按钮1"/>    
<Button        
android:id="@+id/bt_2"        
android:layout_width="match_parent"        
android:layout_height="50dp"        
android:text="这是按钮2"/>    
<Button        
android:id="@+id/bt_goto_second_activity"        
android:layout_width="match_parent"        
android:layout_height="50dp"       
android:text="跳到第二页"/>    
<EditText        
android:id="@+id/et_show"        
android:layout_width="match_parent"       
android:layout_height="match_parent"        
android:hint="显示区"/>
</LinearLayout>

回到MainActivity中输入@BindView(R.id.tv_hello) TextView tvHello;
再在init()方法中tvHello.setText("使用黄油刀"); 在这个时候,如果你运行一下,你就会发现TextView已经被显示出来了。接下来,可以从这个点延伸出去,学习ButterKnife。

以下是MainActivity:

public class MainActivity extends BaseActivity{
    @BindView(R.id.tv_hello)
    TextView tvHello;
    @BindView(R.id.et_show)
    EditText etShow;
    @Override
   public int getContentViewId() {
        return R.layout.activity_main;
    }
    @Override
    protected void init(Bundle savedInstanceState) {
        tvHello.setText("改变");
    }
    @OnClick({R.id.bt_1, R.id.bt_2, R.id.bt_goto_second_activity})
    public void onClickBt(View view){
        switch (view.getId()){
            case R.id.bt_1:
                etShow.setText("1");
                break;
            case R.id.bt_2:
                etShow.setText("2");
                break;
            case R.id.bt_goto_second_activity:
                Intent intent = new Intent(this, SecondActivity.class);
                startActivity(intent);
                break;
            default:
                break;
        }
    }
}

对于Button你甚至不需要去BindView就能编写点击事件

不绑定View

@OnClick
public void 方法名(View view){}

绑定View

@OnClick(x.x.x)
public void 方法名(View view){}

对多个Button可以写在一个方法中,在方法中判断点击的是哪个按钮

@OnClick({x.x.x, x.x.x, x.x.x})
public void 方法名(View view){}

除了点击事件外还有其他的事件也是差不多的用法,比如第二个Activity中的ListView的@OnItemClick,具体的使用请大家自己尝试

注意:RecyclerView不能使用@OnItemClick来使用它的item点击事件,你可以使用原来的方法,自己写或用一些大神的封装。

RecyclerView.ViewHolder的也是可以使用ButterKnife的,比如

public class MyHolderView extends RecyclerView.ViewHolder{
    private IMyViewHolderClicks mListener;
    public interface IMyViewHolderClicks{
        void OnItemClickHolder(int pos);
    }
    @BindView(android.R.id.text1)
    TextView text1;
    public MyHolderView(View itemView, IMyViewHolderClicks itemClickListener) {
        super(itemView);
        mListener = itemClickListener;
        ButterKnife.bind(this, itemView);
    }
    @OnClick
    public void OnClick(View view){
        mListener.OnItemClickHolder(getLayoutPosition());
    }
}

Demo中的第三个Activity练习了ButterKnife在RecyclerView的使用。

END

DEMO下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值