簡體   English   中英

如何在 Android Studio 中定義對視圖的引用?

[英]How do you define a reference to a view in Android Studio?

我正在嘗試運行第 5 章“Android Application Development All-in-One for Dummies”中的代碼。

書中的代碼直接參考了onButtonClick中的viewId's function

fun onButtonClick(view: View){
...
 
        if (checkBox.isChecked()){
            ...
        }

但 Android Studio 將復選框突出顯示為未解決的參考。

我試過的

我試着改變

fun onButtonClick(view: View){
...
        val checkBox = view.findViewById<CheckBox>(R.id.checkBox)
        if (checkBox.isChecked()){
            ...
        }

但是在運行時使用checkBox崩潰的是null。 我查看了如何通過 android 中的屬性添加對另一個視圖的引用? 並嘗試改變

fun onButtonClick(view: View){
...
        val vp : ViewGroup = view.getParent()
        val checkBox = vp.findViewById<CheckBox>(R.id.checkBox)
        if (checkBox.isChecked()){
            ...
        }

但是類型不匹配:推斷類型是 ViewParent(沒有 findViewByID)

讓我寫一個完整的答案

你說:

書中的代碼直接參考了onButtonClick中的viewId's function

這些是 kotlin 的合成導入,但它們已被棄用,新項目默認不再添加這些。 所以你的選擇是ViewBindingfindViewById

在您的情況下(沒有看到您的代碼)

我將假設您需要findViewById而不需要視圖參考,因此您應該能夠:

fun onButtonClick(view: View){
...
    val checkBox = findViewById<CheckBox>(R.id.checkBox)
    if (checkBox.isChecked()){
        ...
    }

以下代碼中發生了什么:

fun onButtonClick(view: View) {

好吧,觸發了 onButtonClick 的視圖被傳遞,所以在你的情況下,如果你按下一個按鈕,那么實際的按鈕會在這里傳遞給你,所以如果你使用view.findViewById<CheckBox>(R.id.checkBox)你試圖在按鈕本身上找到你的復選框,這不起作用。

通過僅使用findViewById<CheckBox>(R.id.checkBox) ,這是對根布局的引用,然后應該找到您的復選框

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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