为什么.text只在onCreate内部起作用?至少按照我的代码:

时间:2019-04-04 21:46:26

标签: android kotlin

我正在学习android studio,我不知道为什么会发生,如果有人可以向我解释一下,我将不胜感激:

当我在onCreate之后放置xxxxanything.text时,出现错误“预期成员声明”,但它在onCreate方法中起作用。为什么会发生?

我几次看到活动生命周期,但是我仍然不确定将内容放置在何处,例如onclick监听器。

我已经想知道一些指南了,我现在正在研究大胆性,很难理解recyclerview,而且我还尝试开发良好的编程习惯。

非常感谢您能提供的任何帮助。

像这样

package app.helloworld.dashimir.com.diceroller

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {

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

        val rollButton: Button = findViewById(R.id.roll_button)
        rollButton.text = "Let's Roll"
    }

}

但是在将其放在create上时出现错误:预期成员声明;

package app.helloworld.dashimir.com.diceroller

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {

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


    }
    val rollButton: Button = findViewById(R.id.roll_button)
    rollButton.text = "Let's Roll"
}

2 个答案:

答案 0 :(得分:1)

在kotlin(.kt)文件中,您的代码应位于函数内部(通常为main)。在Android开发中,这意味着通常您的代码将位于活动中的onCreate之类的方法中,但是类或顶级函数(类之外)中的其他方法也可以工作。

在您的示例中,您移到onCreate之外的代码包含一个值声明val rollButton: Button = findViewById(R.id.roll_button),该声明在类的主体内有效,因为它将被转换为该类的属性。但是第二行:rollButton.text = "Let's Roll"是一个赋值,只能在一个函数中执行。

此外,在具有kotlin的Android中,您可以使用kotlin android extensions,它使您可以直接使用其ID直接从xml引用视图,而无需使用findViewById

答案 1 :(得分:0)

建立功能的最佳方法之一。

第一:在xml文件中将OnClick添加到按钮:

android:OnClick="OnClick"

秒:在MainActivity类中构建Onclick函数,不要忘记构造函数(v:View):

package app.helloworld.dashimir.com.diceroller

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {

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


fun OnClick(v:View){
    val rollButton: Button = findViewById(R.id.roll_button)
    rollButton.text = "Let's Roll"
}