【问题标题】:How do you define a reference to a view in Android Studio?如何在 Android Studio 中定义对视图的引用?
【发布时间】:2021-03-10 10:42:01
【问题描述】:

我正在尝试运行第 5 章“傻瓜式 Android 应用程序开发一体化”中的代码。

书中的代码直接引用了onButtonClick函数中的view Id

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 崩溃是空的。 我看了How can you add a reference to another view through attributes in android? 并尝试更改

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

但是类型不匹配:推断类型是 ViewParent(没有 findViewByID)

【问题讨论】:

标签: android


【解决方案1】:

让我写一个完整的答案

你说:

书中的代码直接引用了onButtonClick中的view Id 功能

这些是 kotlin 的合成导入,但它们已被弃用,新项目不再默认添加这些。所以你的选择是ViewBindingfindViewById

在你的情况下(没有看到你的代码)

我会假设你只是需要findViewById 并且不需要视图参考,所以你应该能够做到:

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

以下代码发生了什么:

fun onButtonClick(view: View) {

好吧,触发了 onButtonClick 的视图被传递了,所以在你的情况下,如果你按下一个按钮,那么实际的按钮会在这里传递给你,所以如果你使用 view.findViewById&lt;CheckBox&gt;(R.id.checkBox) 你正在尝试在按钮本身上找到您的复选框,这不起作用。

只需使用findViewById&lt;CheckBox&gt;(R.id.checkBox),这是对根布局的引用,然后应该会找到您的复选框

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 2018-10-16
    • 1970-01-01
    • 2018-08-26
    • 2018-01-01
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多