目前我有这一系列观点:
ImageView activityImageViews[] = {
(ImageView) rootView.findViewById(R.id.img_activity_1),
(ImageView) rootView.findViewById(R.id.img_activity_2),
(ImageView) rootView.findViewById(R.id.img_activity_3),
(ImageView) rootView.findViewById(R.id.img_activity_4)
};
有没有办法可以使用Butterknife来注入所有这些观点?我需要将它们保存在一个数组中(或者以某种方式让我可以迭代它们)。
答案 0 :(得分:46)
目前可以将多个视图作为数组注入。来自ButterKnife documentation(参见VIEW LISTS部分)
@InjectViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
多次点击监听器也是如此:
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
if (door.hasPrizeBehind()) {
Toast.makeText(this, "You win!", LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Try again", LENGTH_SHORT).show();
}
}
更新2017-09-19 :
由于Butterknife版本Version 7.0.0 (2015-06-27) @Bind
已取代@InjectView
和@InjectViews
。
但是,由于版本Version 8.0.0 (2016-04-25) @Bind
分别用@BindView
和@BindViews
替换为一个视图和多个视图。
所以现在正确的语法是:
@BindView(R.id.button1) Button button1;
@BindView(R.id.button2) Button button2;
@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
答案 1 :(得分:2)
我认为添加到数组中的元素是动态的,否则您可以逐个在标题中声明它们,然后将它们添加到数组中:
// in the header:
@InjectView(R.id.imageview1) ImageView imageView1;
@InjectView(R.id.imageview2) ImageView imageView2;
@InjectView(R.id.imageview3) ImageView imageView3;
// inside your code:
ImageView activityImageViews[] = {
imageView1, imageView2, imageView3
};
但是,如果元素是动态的(元素的数量/元素的ID等),你唯一能做的就是使用ButterKnife.findById
来节省ImageView
演员阵容 - 你可以不要通过注释注入它们,因为Butterknife不知道在编译时生成/注入什么(信息首先在运行时可用)。
ImageView activityImageViews[] = {
ButterKnife.findById(view, R.id.img_activity_1),
ButterKnife.findById(view, R.id.img_activity_2),
ButterKnife.findById(view, R.id.img_activity_3),
ButterKnife.findById(view, R.id.img_activity_4)
};