2017-05-25 130 views
5
fun Tryouts() { 
var CheckBox1 : CheckBox = findViewById(R.id.ForwardBox) as CheckBox 
CheckBox1.setChecked(false) 
} 

我仍然在科特林初学者已经学会只科特林的基本工作,我无法指任何Android小工具或改变它的状态Android Studio中无论是TextView的或复选框或RadioBox。
在所有情况下,对于findViewById都有同样的未解决的引用错误...
我不知道我做错了什么,即使是java转换也会输出相同的错误。未解决参考:findViewById在科特林

+1

作为一个方面说明,我建议考虑看看[科特林的Android扩展(https://kotlinlang.org/docs/tutorials/android-plugin.html),消除了'findViewById的需求( )' –

回答

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

无论如何,考虑小写用下划线separed定义您的ID,例如:

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

我猜** val **在这种情况下更好 – DEADMC

+0

@DEADMC你是对的 – AlexTa

+0

嗯,这并不回答OP的问题:未解决的参考错误。 – Naetmul

4

在科特林你不需要使用findViewById,只需用ID ForwardBoxkotlinx.android.synthetic.<your layout name>。您的代码中所有使用的元素都会自动找到并由kotlin分配给与layout(xml)中的ids相同的变量名称。

例如:

fun init(){ 
    ForwardBox.isChecked = false 
} 
3

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

转到您的build.gradle(模块:APP)

添加以下行

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 
0

您的c颂歌是错误的。请将其更改为此。

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