android - 在 Android Studio 中使用 Kotlin 更改文本值
问题描述
Kotlin 的新手,我遵循了有关如何设置基本“按下按钮并更改文本”的指南但是每当我按下按钮时,应用程序就会崩溃并在调试器中得到
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)'
on a null object reference at com.example.myapplication.MainActivity.One(MainActivity.kt:16)
这是我当前的 MainActivity.KT:
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun One(view: android.view.View) {
val onetext = view.findViewById<TextView>(R.id.textView)
onetext.text = "Hello"
}
}
还有我的activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="168dp"
android:layout_height="90dp"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="One"
android:text="Button"
tools:layout_editor_absoluteX="163dp"
tools:layout_editor_absoluteY="462dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
谢谢!
解决方案
The problem is onetext
is null, which means view.findViewById<TextView>(R.id.textView)
didn't find a view with textView
as id inside of view
. The view
passed in the function is the button
, which has no textView
as a child. You need to search for the textView
in a view higher in the hierarchy.
In the specific example, one way of doing that is by omitting the view
receiver, like so:
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun One(view: android.view.View) {
val onetext = findViewById<TextView>(R.id.textView)
onetext.text = "Hello"
}
}
This way it will search for the textView
id in the Activity's view, which is the activity_main layout.
推荐阅读
- python - 多项式回归排序 x
- angular - 为什么验证错误未显示在视图中
- spring - 如何在数据库上生成字符串主键并使用 JPA 注释定义它
- java - 在 Java 中验证单词的后缀时出错
- python - Pyinstaller:FileNotFoundError:在“jaraco.text”中找不到“Lorem ipsum.txt”资源
- r - 从具有 2 列的数据框创建子集
- python - 正则表达式匹配最后一行的第一个元素
- python - Kivy 无响应且无法更改文本框中的文本
- python - Numpy:在一个方程中找到所需的值,使误差最小化
- c# - 如何在非 UWP C# 项目中访问 Windows.Gaming.Input?