Stu*_*ing 8 android android-layout android-fragments android-viewbinding
我正在我的片段之一中实现 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>
...
Run Code Online (Sandbox Code Playgroud)
我已经遵循了这个答案,但它也不起作用。
为片段生成的视图绑定类内部有绑定,但是属性的类型是View。当我然后引用View使用binding.lSudfDetails类型是LayoutSignUpDetailFieldsBinding. 我无法确定这种类型来自哪里,因为没有生成具有该名称的类,但是我希望它会为其分配正确的绑定类型。这是 中的属性FragmentSignUpDetailsBinding.java。
@NonNull
public final View lSudfDetails;
Run Code Online (Sandbox Code Playgroud)
然而,绑定都已正确设置,它允许我引用嵌套布局中的视图,但当我开始构建时,我遇到了未解决的引用错误。当我像这样引用它们时,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()
}
}
Run Code Online (Sandbox Code Playgroud)
绑定tvSudfWelcome的工作原理是它不喜欢的嵌套绑定。
如果您使用 Android Studio 3.6.0,有时 gradle 插件无法为包含的布局生成 ViewBinding 字段。请将Android Studio更新至3.6.1,并将gradle插件版本更新至3.6.1。
| 归档时间: |
|
| 查看次数: |
6779 次 |
| 最近记录: |