[英]How to use ViewBinding when referencing view IDs from "other" layout XML i.e, not the corresponding Fragment XML?
[英]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
那樣訪問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 子類,然后將視圖轉換為該類型? 有沒有更簡單的方法來實現這一目標?
再次感謝!
視圖綁定的工作方式與合成器的工作方式基本相同,除非你有一個 ID 為checkbox_input
的東西,而不是在Activity
或其他任何東西上神奇地創建一個名為checkboxInput
的變量,而是在ViewBinding
object 中創建它。 因此,如果您之前是這樣訪問它的:
// not declared anywhere, it's just magically there for you to use
checkboxInput
現在您改為在ViewBinding
object 上訪問它:
binding.checkboxInput
您不需要進行任何搜索,這會破壞視點綁定。 它自動將視圖綁定到一個方便的對象中的變量。
您的代碼將與filter { it is CheckBox }
一起使用,然后您將在布局的該部分中獲得所有Checkbox
項目(您也可以使用filterIsInstance<CheckBox>
,同樣的事情)。 但是,如果您想要具有特定 ID 的那個,則必須查看其 ID 屬性——此時,還不如使用findViewById
!
使用 viewBinding,您只需輸入即可訪問視圖
綁定.viewId
其中 viewId 是在您的 xml 中為每個視圖定義的具有屬性的 ID
android:編號
在您的情況下,您可以使用訪問復選框
binding.checkbox輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.