当我尝试将我的视图与 Butterknife 绑定时,每次调用
IllegalStateException
方法后,我都会得到这个 ButterKnife.bind(this, fragmentView!!)
。
例如:
//...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 绑定视图的东西中。 每次 Butterknife 尝试绑定时,都会出现按声明顺序排在第一位的字段的绝对随机视图(仅第一个
@BindView
注释受影响,下一个注释没问题)
我正在使用
@Nullable
注释,它非常有帮助(即使在我删除 @Nullable
注释之后 - 片段也可以正常工作)。但我有很多片段和活动,所以我无法检查所有这些并添加 @Nullable
注释。
我怎样才能找到这个问题的根源,以免再次发生?
这就是我解决这个问题的方法:
构建 -> 清理项目
一切都好!
在 kotlin 项目中使用 Butterknife 是没有意义的。 Kotlin 已经提供了对布局及其视图的直接、轻松的访问。 https://kotlinlang.org/docs/tutorials/android-plugin.html
您应该停止使用 Butterknife 并从 gradle 中删除此库。
您的布局 xml 文件没有 id 为“R.id.logoutButton”的小部件,您可以在 Activity 中引用该 id,也许是因为您在其他 xml 布局文件中设置了该 id,而不是在当前活动中使用的 id .
尝试添加此注释
@Nullable
或@Optional
。我参考了https://github.com/JakeWharton/butterknife/issues/343
@Nullable
@BindView(R.id.tvTitle)