在使用 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!