在使用 ViewBinding 而不是 Kotlin Synthetics 时访问 View 的子项时如何设置 View id?
How do I set View ids when accessing children of View when using ViewBinding instead of Kotlin Synthetics?
我正在更新 Android 项目以使用 ViewBinding
而不是 Kotlin Synthetics
。我很难弄清楚如何更改以下代码,以便我可以从它们的布局 ID 访问视图。
binding.myLinearLayout.children
.filter { it.checkboxInput is CheckBox }
在这种情况下,children
都是通用的 View
类型,无法像以前那样使用 Kotlin Synthetics
.[=20 访问 checkboxInput
ID =]
我收到错误 Unresolved reference: checkboxInput
有什么办法可以解决这个问题?有没有办法检查View是否是绑定类型?我是否需要制作自定义视图 类 才能执行此操作?还有其他想法吗?
感谢您的帮助!
编辑
我还有一个案例有点令人困惑。
binding.formItems.children
.filter { it.getTag(R.id.tag_guest_identifier) != null }
.map { view ->
Guest(
guestIdentifier = view.getTag(R.id.tag_guest_identifier).toString(),
name = view.playerName.valueText.toString(),
...
)
}
}
在这里,我得到了通用 View
的列表,因此我无法访问它们的属性(即 view.playerName... 等)。
我是否需要创建一个 View 子类,然后将视图转换为该类型?有没有更简单的方法来实现这个?
再次感谢!
使用 viewBinding,您只需输入即可访问视图
binding.viewId
其中 viewId 是为您 xml 中具有属性
的每个视图定义的 ID
android:id
在您的情况下,您可以使用
访问复选框
binding.checkboxInput
视图绑定的工作方式与合成器的工作方式基本相同,除非您拥有 ID 为 checkbox_input
的内容,而不是在 Activity
上神奇地创建一个名为 checkboxInput
的变量或不管怎样,它会在 ViewBinding
对象中创建它。因此,如果您之前是这样访问它的:
// not declared anywhere, it's just magically there for you to use
checkboxInput
现在您可以在 ViewBinding
对象上访问它:
binding.checkboxInput
你不需要做任何搜索,这打破了观点绑定!它自动将视图绑定到一个方便的对象中的变量。
您的代码可以与 filter { it is CheckBox }
一起使用,然后您将在布局的该部分中获得所有 Checkbox
项目(您也可以使用 filterIsInstance<CheckBox>
,同样的事情) .但是,如果您想要具有特定 ID 的那个,则必须查看其 ID 属性——此时,不妨使用 findViewById
!
我正在更新 Android 项目以使用 ViewBinding
而不是 Kotlin Synthetics
。我很难弄清楚如何更改以下代码,以便我可以从它们的布局 ID 访问视图。
binding.myLinearLayout.children
.filter { it.checkboxInput is CheckBox }
在这种情况下,children
都是通用的 View
类型,无法像以前那样使用 Kotlin Synthetics
.[=20 访问 checkboxInput
ID =]
我收到错误 Unresolved reference: checkboxInput
有什么办法可以解决这个问题?有没有办法检查View是否是绑定类型?我是否需要制作自定义视图 类 才能执行此操作?还有其他想法吗?
感谢您的帮助!
编辑
我还有一个案例有点令人困惑。
binding.formItems.children
.filter { it.getTag(R.id.tag_guest_identifier) != null }
.map { view ->
Guest(
guestIdentifier = view.getTag(R.id.tag_guest_identifier).toString(),
name = view.playerName.valueText.toString(),
...
)
}
}
在这里,我得到了通用 View
的列表,因此我无法访问它们的属性(即 view.playerName... 等)。
我是否需要创建一个 View 子类,然后将视图转换为该类型?有没有更简单的方法来实现这个?
再次感谢!
使用 viewBinding,您只需输入即可访问视图
binding.viewId
其中 viewId 是为您 xml 中具有属性
的每个视图定义的 IDandroid:id
在您的情况下,您可以使用
访问复选框binding.checkboxInput
视图绑定的工作方式与合成器的工作方式基本相同,除非您拥有 ID 为 checkbox_input
的内容,而不是在 Activity
上神奇地创建一个名为 checkboxInput
的变量或不管怎样,它会在 ViewBinding
对象中创建它。因此,如果您之前是这样访问它的:
// not declared anywhere, it's just magically there for you to use
checkboxInput
现在您可以在 ViewBinding
对象上访问它:
binding.checkboxInput
你不需要做任何搜索,这打破了观点绑定!它自动将视图绑定到一个方便的对象中的变量。
您的代码可以与 filter { it is CheckBox }
一起使用,然后您将在布局的该部分中获得所有 Checkbox
项目(您也可以使用 filterIsInstance<CheckBox>
,同样的事情) .但是,如果您想要具有特定 ID 的那个,则必须查看其 ID 属性——此时,不妨使用 findViewById
!