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.xml activity_note_list.xml
抱歉附加图片文件,当我尝试附加时代码变得一团糟。
答案 0 :(得分: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
。另外,如果没有解决问题。尝试从控制台日志添加代码。它有关于错误的更多详细信息。
更新
如果您想通过 <include>
标记处理包含在您的活动/片段中的 View 或 ViewGroup,您几乎可以直接访问这些视图。您需要在此标记 <include>
中添加一个 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
。
答案 1 :(得分:1)
添加到@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 到官方文档了解更多信息