【问题标题】:View Binding is working for one layout, but not working for another视图绑定适用于一种布局,但不适用于另一种布局
【发布时间】:2021-01-06 17:10:18
【问题描述】:

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

以下是使应用程序在模拟器中不断崩溃的代码 here's the image of the code block

当我不使用视图绑定时它可以工作。

setContentView(R.layout.activity_note_list)

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

setContentView(binding.root)

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

编辑: content_note_list.xmlactivity_note_list.xml

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

【问题讨论】:

  • 错误信息是什么?
  • 欢迎来到 Stack Overflow。请张贴您的代码formatted 而不是图片。

标签: android kotlin android-viewbinding


【解决方案1】:

好像是这个名字。记住android documentation。如果你的布局是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 类。尝试将ContentNoteListBinding 替换为ActivityNoteListBinding。此外,如果它不能解决问题。尝试从控制台日志添加代码。它包含有关错误的更多详细信息。

更新

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

这是一个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

【讨论】:

  • 所以,我发现活动被分成两个独立的部分,content_name.xml 和 activity_name.xml,它们有不同的视图(按钮、列表视图等),您可以添加到每个部分。在activity_note_list.xml 文件中,包含了content_note_list 文件,我需要通过视图绑定来访问来自两个布局(活动和内容)的引用。这将如何运作?
  • 两个 xml 文件都生成了单独的绑定对象。 ActivityNoteListBinding 和 ContentNoteListBinding。我需要访问的大部分参考资料都在 ContentNoteListBinding 中。但是,我仍然需要访问其他布局中的引用。
  • 能否请您添加您的内容、活动和您正在使用的另一个 xml 的 xml。我认为您可以直接访问,但我需要了解您的活动 xml 的结构
【解决方案2】:

添加到@rguzman 答案,为避免遇到此类意外设置错误的绑定类型的问题,您可以使用DataBindingUtil 库。

对于活动

val binding = DataBindingUtil.setContentView(this, R.layout.your_file)

对于片段

 binding = DataBindingUtil.inflate(inflater, R.layout.your_file, container, false)

//other logic

return binding.root

link官方文档了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多