依赖注入框架Butterknife的简单使用

1.依赖注入常用实现方式

A.构造方法注入

B.set方法注入

C.接口注入

2.目的?

将一个类依赖其他类的关系解耦

3.Butterknife(专注于view注入框架使用) ,添加依赖,如下:

在项目的build.gradle,添加依赖

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        ...
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //
    }
}

在app模块build.gradle添加如下:

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt' //

android {
    ...
    }
    buildTypes {
        ...
    }
}

dependencies {
    ...

    compile 'com.jakewharton:butterknife:8.4.0' //
    apt 'com.jakewharton:butterknife-compiler:8.4.0'  //
}

常规使用如下:

public class MainActivity extends AppCompatActivity {

    //ButterKnife可以在activity,fragment , adapter中使用

    @Nullable //为了防止异常没有id
    @BindView(R.id.tv_text)
    TextView tv_text;
    @BindView(R.id.yzs)
    TextView yzs;
    @BindView(R.id.wzs)
    TextView wzs;
    @BindViews({R.id.b1 , R.id.b2 , R.id.b3}) //绑定viewID
    List<Button> buttons;
    @BindString(R.string.app_name) //绑定资源ID
    String appname;
    @BindView(value = R.id.et_edittext)
    EditText edt;
    @BindView(R.id.list)
    ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this); //注释使用
        tv_text.setText("BindView");
        for (int i= 0 ; i < buttons.size() ; i++) {
            int ii = i + i;
            buttons.get(i).setText("bt" + ii);
        }

        String [] items = {"1" , "2" , "3" , "4"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this , R.layout.support_simple_spinner_dropdown_item , items);
        list.setAdapter(adapter);
    }

    @OnClick(R.id.b1) //绑定监听
    public void bt1click(){
        Toast.makeText(this, "这是点击按钮1", Toast.LENGTH_SHORT).show();
    }

    @OnLongClick(R.id.b2) //长按监听
    public boolean bt2longclick(Button bt2){
        bt2.setText("这是按钮2的长按事件");
        return true;
    }

    @OnTouch(R.id.b3) //触摸事件
    public boolean bt3ontouch(View view , MotionEvent event) {
        Toast.makeText(this, "触摸事件", Toast.LENGTH_SHORT).show();
        return true;
    }

    //监听edittext的变化
    @OnTextChanged(value = R.id.et_edittext , callback = OnTextChanged.Callback.BEFORE_TEXT_CHANGED)
    void beforeTextChanged(CharSequence s , int start , int count , int after){
        Log.i("mydate" , s.toString() + " -- " + start + " -- " + count + " -- " + after);
    }

    @OnTextChanged(value = R.id.et_edittext , callback = OnTextChanged.Callback.TEXT_CHANGED)
    void onTextChanged(CharSequence s , int start , int before , int count) {
        //已输入的字数
        yzs.setText(s.length() + "");
        //剩余字数
        int z = 50 - s.length();
        wzs.setText(z + "");

    }

    @OnTextChanged(value = R.id.et_edittext , callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
    void afterTextChanged(Editable s){
        Log.i("mydate" , s.toString());
    }

    //item点击监听
    @OnItemClick(R.id.list)
    void onItemClick(int position) {
        Toast.makeText(this, position + "", Toast.LENGTH_SHORT).show();
    }

}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值