android - 为什么 .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"
}
解决方案
在 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
推荐阅读
- docker - kubelet 无法使用 kube-dns 设置集群 dns 参数
- dji-sdk - DJI 无人机定位 - 移动 SDK
- android - Android - 如何在聚焦时以编程方式获取 TextInputLayout 的提示大小?
- ios - 第一个 leftBarButtonItem 隐藏
- angular - 如何将数据(Json 对象)从 Angular 2 发布到 Web api?
- typescript - 打字稿类对象存储到firebase db
- android - Android - LocationManager requestLocationUpdates 回调在 Lollipop 上不起作用
- excel - Excel VBA从具有文件路径的单元格中附加多个文件
- ruby-on-rails - 如何让我的数据库查询更高效?
- javascript - 如何在 javascript 中将相同的键值对(以不同的顺序)表示为 Map 的相同键?