Butterknife绑定活动之外

时间:2016-05-17 03:25:22

标签: android butterknife

如何使用活动绑定?

public class MyViewController extends BaseViewController<MyActivity> {

    @BindView(R.id.view_pager)
    ViewPager viewPager;

    public void bindViews() {
        //bind(@NonNull Object target, @NonNull Activity source)
        ButterKnife.bind(this, activity);
    }  
}

看起来不错。但是我的应用程序在生成的代码中崩溃了:

    protected InnerUnbinder(final T target, Finder finder, Object source) {
    ...
          target.viewPager = finder.findRequiredViewAsType(source, 2131558529, "field 'viewPager'", ViewPager.class);
    ...
}

其中butterknife.internal.Finder.findRequiredViewAsType是

public final <T> T findRequiredViewAsType(Object source, int id, String who, Class<T> cls) {
    View view = findRequiredView(source, id, who);
    try {
      return cls.cast(view);
    } catch (ClassCastException e) {
      String name = getResourceEntryName(view, id);
      throw new IllegalStateException("View '"
          + name
          + "' with ID "
          + id
          + " for "
          + who
          + " was of the wrong type. See cause for more info.", e);
    }

因为“对象源”是Activity,而不是View,我的应用程序将因类强制转换异常而崩溃。

我只有一个想法如何绑定活动之外的视图:发送myActivity.findViwById(R.id.activity_root_view)作为binder的第二个参数(工作正常)。我认为,没有这个丑陋的代码,这个方法应该可行。你觉得怎么样,我哪里错了?

Butterknife 8.1.0-SNAPSHOT

1 个答案:

答案 0 :(得分:0)

我遇到的问题是我有两个具有相同标识符的不同视图。所以我只是重命名了它们,然后就消失了。

https://github.com/JakeWharton/butterknife/issues/902