在每个片段中都找不到带有字段 ID 的 Butterknife 必需视图

Butterknife Required view with ID for field was not found in every fragment

当我尝试使用 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: Required view login with ID 2131362018 for field logoutButton was not found. If this view is optional add @Nullable (fields) or @Optional (methods) annotation.

关键是我没有像异常所说的那样绑定 'login' 视图。 我有界'logutButton'。 我确实有 'login' 视图,但在另一个与出现异常的片段无关的片段中。

这发生在每个片段中,activity,或适配器或其他需要用 butterknife 绑定视图的东西。 每次 Butterknife 尝试绑定时,声明顺序中首先出现的字段的绝对随机视图(只有第一个 @BindView 注释受影响,下一个注释没问题)

我正在使用 @Nullable 注释,它非常有用(即使在我删除 @Nullable 注释后 - 片段工作正常)。但是我有很多碎片和活动,所以我无法检查所有这些并添加 @Nullable 注释。

如何找到此问题的根源以使其不再发生?

我就是这样解决的:

Build -> Clean Project

一切都很好!

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

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

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

@Nullable
@BindView(R.id.tvTitle)