Я реализую ViewBinding в одном из своих фрагментов. Этот фрагмент имеет следующий макет:
...
<androidx.core.widget.NestedScrollView
android:id="@+id/sv_sudf_container"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/btn_sudf_continue"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/eav_sudf_avatar">
<include
android:id="@+id/l_sudf_details"
layout="@layout/layout_sign_up_details_fields"/>
</androidx.core.widget.NestedScrollView>
...
Я выполнил этот ответ, но он также не работает.
Сгенерированный класс привязки представления для фрагмента имеет привязку внутри, однако тип атрибута - View
. Когда я затем ссылаюсь на View
, используя binding.lSudfDetails
, тип будет LayoutSignUpDetailFieldsBinding
. Я не могу понять, откуда берется этот тип, поскольку не существует сгенерированного класса с таким именем, однако я ожидал бы, что он назначит ему правильный тип привязки. Вот атрибут в FragmentSignUpDetailsBinding.java
.
@NonNull
public final View lSudfDetails;
Однако все привязки настроены правильно, и это позволяет мне ссылаться на представления во вложенном макете, но когда я прихожу к сборке, я получаю неразрешенные ссылочные ошибки. Lint не жалуется, когда я ссылаюсь на них вот так:
binding.lSudfDetails.etSudfDob
Однако компилятор не работает с такими ошибками
Неразрешенная ссылка: etSudfDob
Сама привязка создается в соответствии с документами Android:
private var _binding : FragmentSignUpDetailsBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentSignUpDetailsBinding.inflate(inflater,container,false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.tvSudfWelcome.text = getString(R.string.sign_up_welcome,getString(R.string.app_name))
binding.lSudfDetails.etSudfDob.setOnClickListener {
showYearSelection()
}
}
Привязка tvSudfWelcome
работает как вложенная привязка, которая ему не нравится.
layout_sign_up_details_fields
<merge>
? - person Somesh Kumar   schedule 05.03.2020LinearLayout
. Я перейду на слияние, чтобы посмотреть, имеет ли это значение - person StuStirling   schedule 05.03.2020ViewBinding
. Вы используете последнюю версию Studio v 3.6.1 и gradle v 3.6.1? - person Somesh Kumar   schedule 05.03.20203.6.0
до3.6.1
, и проблема решена. Отправьте сообщение как ответ, и я отмечу его как принятый - person StuStirling   schedule 05.03.2020