未解决的参考:Kotlin中的findViewById

时间:2017-05-25 13:12:00

标签: android kotlin

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

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

8 个答案:

答案 0 :(得分:8)

这似乎是摆脱findViewById ()

的最简单方法

转到Build.Gradle(模块:应用)

添加以下行

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

之后来到您的活动文件说多少是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

答案 1 :(得分:4)

在Kotlin中,您无需使用findViewById,只需使用ForwardBox中的ID kotlinx.android.synthetic.<your layout name>即可。代码中的所有已使用元素都会被kotlin自动找到并分配给与布局(xml)中的ID相同的变量名。

例如:

fun init(){
    ForwardBox.isChecked = false
}

答案 2 :(得分:3)

fun Tryouts() {
    val checkBox = findViewById(R.id.ForwardBox) as CheckBox
    checkBox.isChecked = false
}

无论如何,请考虑以下划线的小写形式定义您的ID,例如:

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

答案 3 :(得分:0)

你的代码错了。请改成它。

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

答案 4 :(得分:0)

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

将其移回类的范围,并解决引用的问题。

答案 5 :(得分:0)

我是一个Android新手,以下更改解决了该问题。

useRef

答案 6 :(得分:0)

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

答案 7 :(得分:0)

在新版本的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.*