是否可以在运行时使用Butter Knife绑定侦听器(如onclick)?我想将在运行时确定的视图传递给方法,并在该方法中将侦听器绑定到它们。我知道如何以正常方式完成我想做的事情,所以我严格询问黄油刀。
答案 0 :(得分:3)
Butterknife注释的保留策略是CLASS
,这意味着注释的字段由编译器识别(注释),但不由虚拟机识别。值的绑定发生在运行时。这意味着所有字段和方法都是预先注释的,后来Butterknife有一个所有字段和方法的映射,其中包含需要绑定的生成类。 Butterknife TL; DR
调用ButterKnife.bind(mRequiredView)
将尝试绑定该视图中的方法/字段。请注意,如果视图ID不存在最明显,Butterknife会抱怨。
另一种方法是将方法包装在另一个(内部)类中,该类将用作目标对象。
private static class BindWrapper{
@OnClick(R.id.view_later_to_be_bind)
public void onClickedView(View v){
}
}
该助手类的实例将用于绑定视图,如:
//somewhere in the code where we need to bind the listener
BindWrapper target = new BindWrapper();
ButterKnife.bind(target, mRequiredView)
不是很优雅的解决方案。