如何使用 Butter Knife 在 运行 时间绑定监听器?

How to bind a listener at run-time with Butter Knife?

是否可以使用 Butter Knife 在 运行 时间绑定监听器,例如 onclick?我想将在 运行 时间确定的视图传递给一个方法,并在该方法中将一个侦听器绑定到它们。我知道如何通过正常方式完成我想做的事情,所以我严格询问黄油刀。

Butterknife 注释的保留策略是 CLASS,这意味着注释的字段由编译器识别(如注释),而不是由虚拟机识别。值的绑定发生在运行时。这意味着所有字段和方法都预先进行了注释,之后 Butterknife 有一个包含所有字段和方法的映射以及生成的需要绑定的 classes。黄油刀 TL;DR

调用 ButterKnife.bind(mRequiredView) 将尝试在该视图中绑定 methods/fields。请注意,如果视图 ID 不存在,最明显的是 Butterknife 会抱怨。

另一种方法是将您的方法包装在另一个(内部)class 中,它将作为目标对象。

private static class BindWrapper{

  @OnClick(R.id.view_later_to_be_bind)
  public void onClickedView(View v){


  }

}

该助手的实例 class 将用于绑定如下视图:

//somewhere in the code where we need to bind the listener
BindWrapper target = new BindWrapper();
ButterKnife.bind(target, mRequiredView)

不是很好的解决方案。