Не удается получить Root View из привязки данных после включения плагина safe-args

Я работаю над Android-приложением, использующим dataBinding, и в настоящее время пытаюсь добавить плагин safe-args, но после включения плагина я больше не могу получить представление root через binding.root - Android Studio выдает ошибку:

Unresolved Reference
None of the following candidates is applicable because of a receiver type mismatch:
* internal val File.root: File defined in kotlin.io

Как я могу заставить привязку данных и безопасные аргументы хорошо играть вместе?

Обратите внимание: пока фрагмент кода находится на Kotlin, я с радостью возьму ответы на Java. Не так комфортно в Java, но я легко могу читать и переводить.

Я не смог найти кого-либо еще с такой же проблемой путем поиска в Google сообщения об ошибке и «безопасных аргументов». Сначала я попробовал использовать путь к классам, указанный в документации по Android здесь: https://developer.android.com/guide/navigation/navigation-pass-data

classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.1.0"

А потом также нашел учебник, предлагающий использовать:

classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha07"

У обоих была одна и та же проблема: binding.root выдал ошибку с активированным плагином.

Вот мой onCreateView () для моего фрагмента. Эта линия возврата работает правильно, когда safe-args не включена, и не работает, когда она включена.

   override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    binding = DataBindingUtil.inflate(inflater, R.layout.fragment_encoder, container, false)

    return binding.root
}

Любая помощь в решении или понимании этой проблемы приветствуется!


person Hannah S.    schedule 23.10.2019    source источник


Ответы (3)


У меня такая же проблема, это так для меня, но просто переименуйте макет, снова сработает, попробуйте: D

person MarkWang    schedule 25.10.2019
comment
Как ни странно, спасибо. Для других, приходящих сюда с той же проблемой, все, что мне нужно было сделать, это рефакторинг ›переименовать XML-файл макета, связанный с классом, который не распознавал binding.root. Вам также придется соответственно переименовать автоматически созданный тип класса для привязки. Как только я это сделал, все заработало правильно, и я даже смог снова переименовать его в исходное имя. Не знаю, как это повлияло на реконструкцию проекта. - person Hannah S.; 25.10.2019
comment
Также, если вы здесь из-за проблем с безопасными аргументами, возможно, вы захотите использовать вместо этого общие ViewModel и LiveData. Это то, что я использую сейчас, потому что мне пришлось продолжать, когда я застрял на безопасных аргументах, и я намного счастливее - person Hannah S.; 25.10.2019
comment
Команда invalid caches не работала, но переименование нераспознанного макета помогло. - person Jeeva; 30.03.2021
comment
Похоже, если идентификатор внутри макета совпадает с одним из названий, которые он выбрасывает, переименование макета в соответствии с исправленным представлением - странно! - person Chris.Jenkins; 14.06.2021

У меня такая же проблема, и, наконец, я попробовал

Файл -> Недействительные кеши / перезагрузка

Меня устраивает.

person Daniel Chin    schedule 26.10.2019
comment
Просто Invalidate работает, перезапускать Android Studio не нужно. - person Micer; 20.06.2020

У меня аналогичная проблема, но только во включенном макете, выполните эти операции за меня.

Build -> Clean Project
Build -> Rebuild Project
person natanhp    schedule 30.03.2021