У меня есть вариант, содержащий тот же ресурс макета, что и в моем исходном наборе main
. Это значит, что он заменяет основной на вкус, зависящий от вкуса. Я делал это во многих местах, и это прекрасно работает, пока я не представил ViewBinding
. Для точности макет - это вложенный макет, который «включен» во фрагмент.
Вот структура:
main
- res
- - layout
- - - layout_sign_up_details_fields.xml
flavor
- res
- - layout
- - - layout_sign_up_details_fields.xml
У меня есть представление с идентификатором til_sudf_first_name
в моем конкретном ресурсе макета, которого у меня нет в моем основном ресурсе. Это задумано. Я вижу, что этот View
"привязан" к моему классу привязки, просматривая сгенерированные источники при запуске этого варианта сборки.
@NonNull
public final TextInputLayout tilSudfFirstName;
Теперь фактическое связывание происходит в «базовом» классе и используется совместно с дочерними классами с помощью модификатора видимости protected
следующим образом:
private var _binding : FragmentSignUpDetailsBinding? = null
protected val binding get() = _binding!!
protected val detailsBinding get() = binding.lSudfDetails
Проблема в том, что detailsBinding
не содержит требуемого мне представления, хотя оно присутствует в сгенерированном классе.
Вдобавок другая странность заключается в том, что даже несмотря на то, что в файле макета main
есть представления, которых нет в файле макета для конкретного варианта, они все равно включаются в сгенерированный файл макета.
Возможно ли то, что я пытаюсь сделать? Доступный мне обходной путь - использовать обработку синтетического представления kotlin для этого экземпляра, как и я, но я пытался использовать рекомендуемый подход.
findViewById
для ссылки на представление, зависящее от вкуса. - person StuStirling   schedule 17.03.2020