【问题标题】:Kotlin-Android First App Unresolved Reference TextView Button etcKotlin-Android First App Unresolved Reference TextView Button etc
【发布时间】:2018-11-25 18:13:17
【问题描述】:

我是 Android 和 Kotlin 开发的新手。

我想从一个简单的“Hello World”开始,但现在遇到了问题。

我向我的 MainActivity 添加了一个 Textview,并希望设置一个 onClick 侦听器来更改我拖入活动的 TextView 的文本。

编译器现在抱怨“TextView”是一个未解析的引用(对按钮等也是如此)。

然后我按照网站的建议添加了一个 kotlinx 导入,但这无法解决任何问题。下面的代码示例,任何带有星号的行注释都是我添加的。

package com.example.my.mynewapp

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.fragmentX.view.* // *

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val textView: TextView = findViewById(R.id.testView) as TextView  // *
        textView.setOnClickListener { // *
            textView.text = "You clicked me! You flipping clicked me!" // *
        } // *

    }
}

有人知道发生了什么吗?

【问题讨论】:

  • 刚刚解决了,显然你必须导入android.widget.TextView,这样就解决了问题。无需投票,我们都必须学习。
  • 在 kotlin 中不需要使用 findViewById。您可以使用 id 直接访问您的视图。
  • @AkshayRaiyani 能否举例说明如何使用 id 访问视图?
  • @user2868623 这是一篇关于如何使用 id 访问视图的好博客。 antonioleiva.com/kotlin-android-extensions

标签: android kotlin textview


【解决方案1】:

应该是自动导入的,但是应该有

import android.widget.<WhateverIsMissing>

将 WhatIsMissing 替换为未解析的引用

【讨论】:

  • 是的,1.5 年前就知道了(请参阅我对 OP 的评论)。但感谢您抽出时间回复。
【解决方案2】:

如果您使用 Android Studio v.4.2.1,您必须在 (build.gradle) 文件中添加这一行,如下所示:-

id 'kotlin-android-extensions'

【讨论】:

    【解决方案3】:

    您在课堂上夸大activity_main.xml
    这个TextView是否属于上述布局?
    如果是,那么您不需要findViewById()
    只需添加到您的导入中:

    import kotlinx.android.synthetic.main.activity_main.*
    

    并且不是

    import kotlinx.android.synthetic.main.fragmentX.view.*
    

    然后在活动类中的任何位置使用testView(这是TextView 的ID,除非是拼写错误)。

    【讨论】:

    • 是的,名为'testView'的TextView属于布局。添加您的导入不会执行任何操作;只有当我明确添加'import android.widgets.TextView'时才能编译。在我的课堂上“膨胀”xml 文件是什么意思?
    • @TheFox 如果是这种情况,那么就会出现问题,因为您应该 1 一个 1 地导入布局的所有视图。但是 Kotlin 不是这种情况。使用 Kotlin 的一个优点是 您不需要在 Activity 中使用 findViewById() 来访问其视图。您只需像我一样导入布局,就可以了。如果之后无法识别 TextView,则 它不属于 activity_main.xml,或者您可能需要清理并重建您的项目。
    • 为了清楚起见,我必须导入 android.widgets.TextView,不是吗?清理和重建并不能解决问题,但是 activity_main.xml 确实包含 TextViews。
    • android.widget.TextView 在其代码中使用 TextView 的任何类中被 自动导入。您不必导入它。即使你写了val tv: TextView... 之类的东西,AS 也会导入android.widget.TextView,或者你会按 Alt Enter 并接受建议。
    【解决方案4】:

    还要检查您的导入是否完整:

    如果您为活动、片段等定义了多个布局,请确保相应控件的类在布局之间匹配。这是我看到此错误消息的最常见情况。

    【讨论】:

      【解决方案5】:

      在 build.gradle 中添加 apply plugin: 'kotlin-android-extensions' 通过双班次搜索并编写“构建”,然后在 dependencies 部分添加插件,然后应该会出现导入选项

      【讨论】:

        【解决方案6】:
        • 项目文件夹下有gradle脚本
        • 打开 build.gradle(模块:您的应用名称)
        • 将“id-android-extensions”添加到插件中
        • 然后同步它

        【讨论】:

          猜你喜欢
          • 2021-06-23
          • 1970-01-01
          • 2021-11-19
          • 2018-03-22
          • 1970-01-01
          • 2018-05-03
          • 1970-01-01
          • 2016-07-02
          • 2014-02-18
          相关资源
          最近更新 更多