【问题标题】:Butterknife Required view with ID for field was not found in every fragment在每个片段中都没有找到带有字段 ID 的 Butterknife 必需视图
【发布时间】:2019-06-27 13:33:34
【问题描述】:

当我尝试用 Butterknife 绑定我的视图时,我每次调用 ButterKnife.bind(this, fragmentView!!) 方法后都会得到这个 IllegalStateException。

例如:

//...BindView section
@BindView(R.id.logoutButton)
lateinit var logoutButton: View

@BindView(R.id.closeSession)
lateinit var closeSessionButton: View

@BindView(R.id.settings)
lateinit var settingsButton: View

我明白了:

java.lang.IllegalStateException: 未找到字段 logoutButton 所需的 ID 为 2131362018 的视图登录。 如果此视图是可选的,请添加@Nullable(字段)或@Optional(方法)注释。

关键是我没有像异常所说的那样绑定“登录”视图。 我限制了'logutButton'。 我确实有“登录”视图,但在另一个与出现异常的片段没有连接的片段中。

这发生在每个片段、活动或适配器或其他需要用黄油刀绑定视图的东西中。 并且每次 Butterknife 尝试绑定时,声明顺序中首先出现的字段的绝对随机视图(仅影响第一个 @BindView 注释,下一个注释很好)

我正在使用 @Nullable 注释,它的帮助非常好(即使在我删除了 @Nullable 注释之后 - 片段工作正常)。但是我有很多片段和活动,所以我不能全部检查并添加@Nullable注解。

我怎样才能找到这个问题的根源,以免它再次发生?

【问题讨论】:

  • 在使用 kotlin 时不需要黄油刀。kotlin android 扩展提供对布局视图对象的直接访问!
  • 清理并构建后尝试

标签: android kotlin butterknife


【解决方案1】:

这就是我解决这个问题的方法:

构建 -> 清理项目

一切都很好!

【讨论】:

    【解决方案2】:

    在 kotlin 项目中使用 Butterknife 毫无意义。 Kotlin 已经提供了对布局及其视图的直接和轻松访问。 https://kotlinlang.org/docs/tutorials/android-plugin.html

    你应该停止使用黄油刀并从 gradle 中删除这个库。

    【讨论】:

    • Google 不推荐使用 kotlin.syntethic 插件。 source
    【解决方案3】:

    尝试添加此注释@Nullable 或@Optional。我参考了https://github.com/JakeWharton/butterknife/issues/343

    @Nullable
    @BindView(R.id.tvTitle)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      相关资源
      最近更新 更多