在Activity中使用ButterKnife绑定View,并获取监听事件
普通情况下写法如下:
@BindView(R.id.back)
ImageView back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sports);
ButterKnife.bind(this);
}
@OnClick({R.id.back})
public void onViewClicked() {
// 做相应的监听操作
}
当需要在代码中动态添加ViewGroup,并对其子控件进行相应操作的时候(比如在Adapter中),通常写法如下:
public class MainActivity {
@BindView(R.id.back)
ImageView back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sports);
ButterKnife.bind(this);
View headView = LayoutInflater.from(this).inflate(R.layout.item_headview, null);
ViewHolder holder = new ViewHolder(headView);
holder.classifyView.setText("头部局");
...
}
@OnClick({R.id.back})
public void onViewClicked() {
...
}
static class ViewHolder{
@BindView(R.id.classify)
TextView classifyView;
public ListHeadViewHolder(View rootView) {
ButterKnife.bind(this, rootView);
}
}
}
或者:
public class MainActivity {
@BindView(R.id.back)
ImageView back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sports);
ButterKnife.bind(this);
View headView = LayoutInflater.from(this).inflate(R.layout.item_headview, null);
TextView classifyView = ButterKnife.findById(headView, R.id.classify);
classifyView.setText("头部局");
...
}
@OnClick({R.id.back})
public void onViewClicked() {
...
}
}
对动态添加的布局进行监听:
public class MainActivity implements View.OnClickListener {
@BindView(R.id.back)
ImageView back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sports);
ButterKnife.bind(this);
View headView = LayoutInflater.from(this).inflate(R.layout.item_headview, null);
TextView classifyView = ButterKnife.findById(headView, R.id.classify);
classifyView.setText("头部局");
classifyView.setOnClickListener(this);
...
}
@OnClick({R.id.back})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.classify:
break;
case R.id.back:
break;
}
}
@Override
public void onClick(View v) {
// 直接将onClick监听事件转到ButterKnife的onViewClicked中处理
onViewClicked(v);
}
}
HeaderView布局文件:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/classify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints" />
</android.support.constraint.ConstraintLayout>