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

15

Я работаю над приложением для 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, но я могу легко прочитать и перевести его.

Я не смог найти никого другого с такой же проблемой, прибегая к помощи сообщения об ошибке и «безопасных аргументов». Сначала я попробовал использовать путь к классам, указанный в документации по 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
}

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

Ханна С.
источник

Ответы:

11

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

MarkWang
источник
2
Это действительно помогло, как ни странно, спасибо. Для других, приходящих сюда с такой же проблемой, все, что мне нужно было сделать, - это рефакторинг> переименовать файл XML макета, связанный с классом, который не распознал binding.root. Вам также придется соответственно переименовать автоматически сгенерированный тип класса для привязки. Как только я это сделал, все работало правильно, и я даже смог переименовать обратно в исходное имя. Не уверен, как это могло сделать что-нибудь, перестройка проекта не была ..
Ханна С.
Также, если вы находитесь здесь из-за проблем с безопасными аргументами, возможно, вы захотите использовать общие ViewModel и LiveData. Это то, что я использую сейчас, потому что мне пришлось продолжать идти, когда я застрял на безопасных аргах, и я намного счастливее
Ханна С.
24

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

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

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

Даниэль Чин
источник