首页 > 解决方案 > 为什么 .text 只适用于 onCreate ?至少在我的代码中:

问题描述

我正在学习android studio,但我不知道为什么会这样,如果有人能解释一下,我将不胜感激:

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

我有时看到了活动生命周期,但我仍然怀疑将东西放在哪里,比如 onclick 监听器。

我已经想知道几个指南了,我现在正在研究 udacity,很难理解 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"
    }

}

但是当我在创建后放置它时出现错误:预期的成员声明;

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"
}

标签: androidkotlin

解决方案


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

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

此外,在带有 kotlin 的 Android 中,您有可用的 kotlin android 扩展,可让您直接使用 xml 的 id 引用来自 xml 的视图,而无需使用findViewById


推荐阅读