Butterknife 未在每个片段中找到包含字段 ID 的必需视图

问题描述 投票:0回答:4

当我尝试将我的视图与 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
注释。

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

android kotlin butterknife
4个回答
7
投票

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

构建 -> 清理项目

一切都好!


1
投票

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

您应该停止使用 Butterknife 并从 gradle 中删除此库。


0
投票

您的布局 xml 文件没有 id 为“R.id.logoutButton”的小部件,您可以在 Activity 中引用该 id,也许是因为您在其他 xml 布局文件中设置了该 id,而不是在当前活动中使用的 id .


-3
投票

尝试添加此注释

@Nullable
@Optional
。我参考了https://github.com/JakeWharton/butterknife/issues/343

@Nullable
@BindView(R.id.tvTitle)
© www.soinside.com 2019 - 2024. All rights reserved.