【问题标题】:Unresolved Reference: findViewById in Kotlin未解决的参考:Kotlin 中的 findViewById
【发布时间】:2017-05-25 13:11:59
【问题描述】:
fun Tryouts() {
var CheckBox1 : CheckBox = findViewById(R.id.ForwardBox) as CheckBox
CheckBox1.setChecked(false)
}

我仍然是 Kotlin 的初学者,只学习了 kotlin 的基本工作,我无法引用任何 android 小部件或在 Android Studio 中更改它的状态,无论是 TextView、CheckBox 还是 RadioBox。
在所有情况下 findViewById 的相同未解决参考错误...
我不知道我做错了什么,即使是java转换也输出相同的错误。

【问题讨论】:

标签: android kotlin


【解决方案1】:

看来这是摆脱findViewById ()的最简单方法

转到您的 Build.Gradle(模块:应用程序)

添加以下行

apply plugin: 'kotlin-android-extensions'
  • 然后它会要求你同步
  • 然后按同步

然后来到你的活动文件说它很多是MainActivity.kt

有进口 导入单个视图

import kotlinx.android.synthetic.main.<layout_name>.<view_name>;

导入所有视图

import kotlinx.android.synthetic.main.<layout_name>.*;

示例: 在你的布局中

<Checkbox id="@+/forwardBox" . .  . />

它在activity_main 布局中 然后导入为

import kotlinx.android.synthetic.main.activity_main.forwardBox;

所以在你的函数或类中直接使用它

forwardBox.isChecked = false

【讨论】:

  • 'kotlin-android-extensions' 已弃用
【解决方案2】:

在 Kotlin 中,您不需要使用 findViewById,只需使用来自 kotlinx.android.synthetic.&lt;your layout name&gt; 的 id ForwardBox。 kotlin 会自动找到代码中所有使用的元素并将其分配给与 layout(xml) 中的 ids 相同的变量名称。

例如:

fun init(){
    ForwardBox.isChecked = false
}

【讨论】:

    【解决方案3】:
    fun Tryouts() {
        val checkBox = findViewById(R.id.ForwardBox) as CheckBox
        checkBox.isChecked = false
    }
    

    无论如何,请考虑将您的 ID 定义为用下划线分隔的小写字母,例如:

    val checkBox = findViewById(R.id.forward_box) as CheckBox
    

    【讨论】:

    • 我猜 val 在这种情况下会更好
    • 好吧,这并没有回答 OP 的问题:未解决的参考错误。
    【解决方案4】:

    我遇到了完全相同的问题,问题是他们已经升级了所有东西来查看绑定, 尝试将其用作主类中的私有函数 class MainActivity : AppCompatActivity() - 它对我有用。

    【讨论】:

      【解决方案5】:

      您的代码错误。请改成这个。

      fun Tryouts() {
          var CheckBox1 = findViewById(R.id.ForwardBox) as CheckBox
          CheckBox1.setChecked(false)
      }
      

      在 Kotlin 中,只需声明一个变量。点赞:var abc

      abc可以被任何类型的对象初始化。

      如果我们必须从布局中获取视图,那么我们必须编写:

      findViewById(R.id.ForwardBox)
      

      然后投射该视图。

      findViewById(R.id.ForwardBox) as CheckBox
      

      然后存储在一个变量中。

      var CheckBox1 = findViewById(R.id.ForwardBox) as CheckBox
      

      【讨论】:

      • 不要说“你的代码错了”,如果不是,问题就不存在了。说一些有用的东西,比如为什么错了。
      【解决方案6】:

      我遇到了同样的问题,原因是我不小心在类之外声明了该函数,其中 AppCompatActivity 的 findViewById 方法不可用。

      将其移回类的范围并解析引用。

      【讨论】:

        【解决方案7】:

        对我来说,我是一个 android 新手,以下更改解决了这个问题。

        var CheckBox1 = findViewById&lt;CheckBox&gt;(R.id.ForwardBox)

        【讨论】:

          【解决方案8】:

          在新版本的 kotlin 和/或 android studio 中,我刚刚做了:

          plugins {
              id 'com.android.application'
              id 'kotlin-android'
              id 'kotlin-android-extensions'
          }
          

          (在 build.gradle [Module] 文件的顶部)

          然后我返回到我的活动代码并写下我的按钮名称(btn_search),android studio 完成了参考

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-10-25
            • 1970-01-01
            • 1970-01-01
            • 2021-11-02
            • 2021-10-29
            • 2018-10-16
            • 2023-03-25
            • 1970-01-01
            相关资源
            最近更新 更多