如何解决Kotlin-Android First App Unresolved Reference TextView with Button
我是 android 和 kotlin 开发的新手,我的第一个应用程序遇到了问题。
我希望在单击按钮时编辑我的 TextView,但编译器抱怨未解析的引用。
这是我的 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">
<Button
android:id="@+id/click_me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onTap"
android:text="Click me"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="64dp"
android:text="Not clicked..."
app:layout_constraintStart_toStartOf="@+id/click_me"
app:layout_constraintTop_toBottomOf="@+id/click_me" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是我的 MainActivity.kt 文件
package com.example.helloworld
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
//Method will be called on button click
fun onTap(view: View) {
textView.text = "Clicked"
}
}
}
解决方法
正如其他用户已经评论过的,您应该使用视图绑定。
在您的应用 Gradle 脚本中。
android {
...
buildFeatures {
viewBinding = true
}
}
然后在您的 MainActivity
private lateinit var binding: ActivityMainBinding
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.yourButtonID.setOnClickListener {buttonTtapped()}
}
fun buttonTtapped() {
binding.yourTextViewID.text = "Clicked"
}
}
像这样
,您应该将 textview 定义为变量,然后您可以更改它
val textView = findViewById(R.id.text_view_id)
textView.setText("string").toString()
val textViewValue = textView.text
,你需要在你的 build.gradle 文件中应用它
plugins {
id 'kotlin-android-extensions'}
然后按同步 然后回到您的 MainActivity 它将建议您导入该视图
,Kotlin 有一个功能告别 findViewById,适用于 Kotlin Android 扩展。需要导入import kotlinx.android.synthetic.main.activity_main.*
,以便直接使用视图的ID名称。
要完成这项工作,您需要将此插件添加到模块级 build.gradle
文件中
apply plugin: 'kotlin-android-extensions'
findViewById 的另一种方法
class SampleActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
fun onTap(view: View){
val myTextView = findViewById<TextView>(R.id.textView)
myTextView.text = "absc"
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。