首页 > 解决方案 > 视图绑定适用于一种布局,但不适用于另一种布局

问题描述

android 开发的新手,我正在尝试应用视图绑定,因为它们是谷歌目前推荐的视图引用方法。我有两个布局 content_main.xml 和 content_note_list.xml。我得到了第一个'content_main_xml'(MainActivity)来使用视图绑定。但是,我在为第二个“content_note_list.xml”实现视图绑定时遇到了麻烦。

下面是在模拟器中不断使应用程序崩溃的代码 这 是代码块的图像

它在我不使用视图绑定时起作用,即。

setContentView(R.layout.activity_note_list)

但是一旦我尝试使用视图绑定,它就会打开应用程序并立即崩溃

setContentView(binding.root)

我不知道我做错了什么,我按照官方android开发网站提供的描述,多个视频。任何帮助都是必要的。

编辑: content_note_list.xml activity_note_list.xml

为附加图像文件道歉,当我尝试附加它时,代码变得一团糟。

标签: androidkotlinandroid-viewbinding

解决方案


好像是这个名字。从android 文档中记住。如果您的布局是result_profile.xml

<LinearLayout ... >
    <TextView android:id="@+id/name" />
    <ImageView android:cropToPadding="true" />
    <Button android:id="@+id/button"
        android:background="@drawable/rounded_button" />
</LinearLayout>

ViewBinding 将生成ResultProfileBinding.

如果为模块启用了视图绑定,则会为模块包含的每个 XML 布局文件生成一个绑定类。每个绑定类都包含对根视图和所有具有 ID 的视图的引用。绑定类的名称是通过将 XML 文件的名称转换为 Pascal 大小写并在末尾添加单词“Binding”来生成的。

所以,考虑到这一点。如果您的布局是activity_note_list,它将生成 ActivityNoteListBinding 类或类似的东西。在您的代码中,您正在设置ContentNoteListBinding类。尝试替换ContentNoteListBindingActivityNoteListBinding. 此外,如果它不能解决问题。尝试从控制台日志添加代码。它有更多关于错误的细节。

更新

如果您想处理包含在您的活动/片段上<include>标签中的 View 或 ViewGroup,您几乎可以直接访问这些视图。您需要在此标签中添加一个 Id <include>。然后您将可以访问这些组件:例如:

这是一个activity_note_list.xml

........
<include 
    id="+@id/ly_content_list_note"
    layout="@layout/content_list_note"/>
........

和 content_note_list.xml

<listView
    id="+id/listNotes"
    .......
/>

现在在您的 Activity 类中,您可以通过以下方式访问:

binding.lyContentListNote.listNotes

如您所见,首先直接访问容器的 id,即容器中的ly_content_list_note所有视图组件,在本例中为listNotes.


推荐阅读