在Activity之外使用Butterknife绑定

5
如何在活动中使用绑定?
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,因此我的应用程序会崩溃并出现类转换异常。
我只有一个想法可以在activity外绑定视图:将myActivity.findViewById(R.id.activity_root_view)作为binder的第二个参数发送(运行良好)。 我认为,这种方法应该可以在没有这个丑陋代码的情况下正常工作。你认为呢?
Butterknife 8.1.0-SNAPSHOT

为什么你在 Presenter 中绑定视图?这应该在 Activity 或 Fragment 中完成。 - Ashish Tiwari
为什么您需要将viewPager作为Presenter的一部分?我认为它是View的一部分。 - x0r
你说得对,这是视图部分而不是Presenter,我会重构它。我只使用活动和片段作为带有导航/状态逻辑的视图容器,并将所有视图逻辑移动到其他类中。但问题是关于其他方面的。 - VKDev
如果您的目标只是在活动上绑定视图,则应该在onCreate中设置活动内容后立即调用ButterKnife.bind(this); - GabrielOshiro
3
我认为没有人抓住问题的核心,对于那些希望减少对Android框架依赖的人来说,能够在Activity / Fragment之外绑定视图会很好。 - Andrea Thacker
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接