ButterKnife

ButterKnife可以将程序猿从麻烦的findViewById和setOnClickListener当中解脱出来,举例说明

如下图所示,界面当中包含有三个TextView和三个Button,

image

按照通常的写法,首先得定义变量,然后通过findViewById函数一一进行实例化,

单击事件也必须要每个View来设置setOnClickListener。如下所示

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button mBtn1;
    private Button mBtn2;
    private Button mBtn3;

    private TextView textView1;
    private TextView textView2;
    private TextView textView3;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找view
        mBtn1 = (Button) findViewById(R.id.button1);
        mBtn2 = (Button) findViewById(R.id.button2);
        mBtn3 = (Button) findViewById(R.id.button3);
        textView1 = (TextView) findViewById(R.id.first);
        textView2 = (TextView) findViewById(R.id.second);
        textView3 = (TextView) findViewById(R.id.third);

        //设置点击事件
        mBtn1.setOnClickListener(this);
        mBtn2.setOnClickListener(this);
        mBtn3.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if(v == mBtn1) {
            Toast.makeText(this, "button1点了也没啥用", Toast.LENGTH_SHORT).show();
        }else if(v == mBtn2){
            Toast.makeText(this, "button2点了也没啥用", Toast.LENGTH_SHORT).show();
        }else if(v == mBtn3){
            Toast.makeText(this, "button3点了也没啥用", Toast.LENGTH_SHORT).show();
        }
    }
}

如果项目当中引入了butterknife框架,则代码可以简化,

而且在Fragment和Adapter当中也可以使用,只是参数有变化。

public class SecondActivity extends AppCompatActivity {

    @BindView(R.id.button1) Button mBtn1;
    @BindView(R.id.button2) Button mBtn2;
    @BindView(R.id.button3) Button mBtn3;

    @BindViews({R.id.first,R.id.second,R.id.third}) List<TextView> textViewList;

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

        ButterKnife.bind(this);//关联ButterKnife

        for(int i=0;i<textViewList.size();i++){
            textViewList.get(i).setText("第"+i+"个");
        }
    }

    @OnClick({R.id.button1,R.id.button2,R.id.button3}) void click(View view){
        if(view == mBtn1) {
            Toast.makeText(this, "button1点了也没啥用", Toast.LENGTH_SHORT).show();
        }else if(view == mBtn2){
            Toast.makeText(this, "button2点了也没啥用", Toast.LENGTH_SHORT).show();
        }else if(view == mBtn3){
            Toast.makeText(this, "button3点了也没啥用", Toast.LENGTH_SHORT).show();
        }
    }
}

定义的mBtn变量可以直接使用,而且也可以一次性指定多个View的单机事件。

以下为在fragment当中的使用方法

@Override 
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fancy_fragment, container, false); 
     //参数多了一个view
     ButterKnife.inject(this, view); 
     return view;
   }
 }

使用butterKnife只需要在项目当中加入以下代码即可

dependencies {
    compile 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}

Butterknife的项目地址为:https://github.com/JakeWharton/butterknife

posted @ 2016-11-28 15:35  黄大仙爱编程  阅读(136)  评论(0编辑  收藏  举报