Butterknife Требуемый вид с идентификатором для поля не был найден в каждом фрагменте

Когда я пытаюсь связать свои представления с помощью 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: Требуемый вход в систему с идентификатором 2131362018 для поля logoutButton не найден. Если это представление является необязательным, добавьте аннотацию @Nullable (поля) или @Optional (методы).

Дело в том, что я НЕ ПРИВЯЗАЛ вид «логин», как сказано в исключении. Я ограничил 'logutButton'. У меня было представление «логин», но в другом фрагменте, который не имеет связи с фрагментом, где появляется исключение.

И это происходит в каждом фрагменте, активности, адаптере или чем-то еще, что требует привязки представлений с помощью Butterknife. И каждый раз, когда Butterknife пытается связать, абсолютно случайное представление для поля, которое стоит первым в порядке объявления (затрагивается только первая аннотация @BindView, следующая аннотация в порядке)

Я использую аннотацию @Nullable, и она отлично помогает (даже после того, как я удалил аннотацию @Nullable - фрагмент работает нормально). Но у меня много фрагментов и активностей, поэтому я не могу проверить их все и добавить аннотацию @Nullable.

Как мне найти источник этой проблемы, чтобы она никогда больше не повторилась?


person Егор Благочиннов    schedule 22.12.2018    source источник
comment
Вам не нужен масляный нож при использовании kotlin. Расширения kotlin для Android обеспечивают прямой доступ к объектам представления макета!   -  person the_dani    schedule 22.12.2018
comment
попробуйте после очистки и сборки   -  person Mitesh Vanaliya    schedule 23.12.2018


Ответы (3)


Вот как я решил это:

Сборка -> Очистить проект

И все отлично!

person Егор Благочиннов    schedule 23.12.2018

Использование Butterknife в проекте kotlin бессмысленно. Kotlin уже обеспечивает прямой и простой доступ к макету и его виду. https://kotlinlang.org/docs/tutorials/android-plugin.html

Вы должны прекратить использовать Butterknife и удалить эту библиотеку из Gradle.

person DawidJ    schedule 23.12.2018
comment
Плагин kotlin.synthetic не рекомендуется Google. источник - person Emmanuel Guerra; 07.08.2019

Попробуйте добавить эту аннотацию @Nullable или @Optional. Я взял ссылку с https://github.com/JakeWharton/butterknife/issues/343

@Nullable
@BindView(R.id.tvTitle)
person Yyy    schedule 27.06.2019