Android Studio中Kotlin方法无法获取已设ID的TextView问题求助
解决Kotlin中无法获取TextView值的问题
你代码里直接用textView没法访问到布局里的控件,因为Kotlin不会自动关联布局中的视图(除非依赖已废弃的旧插件),下面给你两种可行的解决方法:
方法1:用findViewById手动获取视图
先在Activity里声明TextView变量,在onCreate中完成初始化,之后就能正常使用:
package com.example.myapplication2 import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.TextView // 别忘了导入TextView类 class MainActivity : AppCompatActivity() { // 声明全局TextView变量 private lateinit var textView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 绑定布局中ID为textView的控件 textView = findViewById(R.id.textView) } fun countMe(view: View){ val countString = textView.text.toString() // 用Kotlin扩展函数toInt()更简洁 var count = countString.toInt() count++ // 记得把更新后的数值设置回TextView textView.text = count.toString() } }
方法2:用视图绑定(View Binding,官方推荐)
这是当前官方推荐的视图绑定方式,比findViewById更安全、更便捷:
- 先在模块级
build.gradle文件中启用视图绑定:
android { ... buildFeatures { viewBinding true } }
- 修改Activity代码:
package com.example.myapplication2 import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import com.example.myapplication2.databinding.ActivityMainBinding // 自动生成的绑定类 class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化绑定类 binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } fun countMe(view: View){ // 通过binding对象直接访问TextView val countString = binding.textView.text.toString() var count = countString.toInt() count++ binding.textView.text = count.toString() } }
原代码失效的原因
你之前的写法依赖已被官方废弃的kotlin-android-extensions插件,现在该插件不再维护,因此不能直接通过ID名称访问控件,必须手动完成视图绑定。
内容的提问来源于stack exchange,提问作者asdf18
相关产品推荐
相关产品推荐

