Android Fragments ViewBinding -包含的布局绑定导致无法解析的引用

e0bqpujr  于 2022-11-24  发布在  Android
关注(0)|答案(4)|浏览(261)

我正在我的一个片段中实现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>
...

我已经遵循了this answer,但它也不工作。
为片段生成的视图绑定类在内部有绑定,但是属性的类型是View。当我使用binding.lSudfDetails引用View时,类型是LayoutSignUpDetailFieldsBinding。我无法计算出该类型的来源,因为没有生成具有该名称的类。我希望它会给它分配正确的绑定类型。

@NonNull
public final View lSudfDetails;

绑定都是正确设置的,但是它允许我引用嵌套布局中的视图,但是当我开始构建时,我得到了未解决的引用错误。当我这样引用它们时,Lint没有抱怨:
binding.lSudfDetails.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绑定使用它不喜欢的嵌套绑定。

new9mtju

new9mtju1#

如果您使用的是Android Studio 3.6.0,gradle插件有时无法为包含的布局生成ViewBinding字段。请更新至Android Studio 3.6.1,并将gradle插件版本更新至3.6.1。

zlhcx6iw

zlhcx6iw2#

如果有人有类似的问题...我解决了我的问题,添加宽度和高度为这个包括的视图。它帮助,我不知道为什么,但这将是我的解决方案:

<include
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/l_sudf_details"
        layout="@layout/layout_sign_up_details_fields"/>
ozxc1zmp

ozxc1zmp3#

如果有人有类似的问题-我解决我的使用:
执行gradle task : prepareKotlinBuildScriptModel

bqujaahr

bqujaahr4#

将id名称更改为与布局名称相同。例如:

<include
            android:id="@+id/layout_sign_up_details_fields"
            layout="@layout/layout_sign_up_details_fields"/>

不过我使用的是数据绑定而不是视图绑定

相关问题