簡體   English   中英

在使用 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那樣訪問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM