android - setonclicklistner 在 kotlin 中不起作用
问题描述
我是 kotlin 的新手,我试图从课程中制作一个 bmi 应用程序,我绑定了视图,一切都运行良好,但我认为我的 onclicklistner 在下面不起作用是我的代码,任何人都可以检查并查看有什么问题
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding= ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
if(binding.weightEditText.text.isNotEmpty() && binding.heightEditText.text.isNotEmpty()) {
binding.calculateButton.setOnClickListener {
val weight = binding.weightEditText.text.toString().toFloat()
val height = binding.heightEditText.text.toString().toFloat()
val myBMI = weight / (height * height)
binding.bmiValue.text = myBMI.toString()
if (myBMI < 18.5) {
binding.imageView.setImageResource(R.drawable.underweight)
} else if (myBMI >= 18.5 && myBMI < 24.9) {
binding.imageView.setImageResource(R.drawable.healthy)
} else if (myBMI >= 24.9 && myBMI < 29.9) {
binding.imageView.setImageResource(R.drawable.overweight)
} else if(myBMI>29.9) {
binding.imageView.setImageResource(R.drawable.obesity)
}
}
}
else{
Toast.makeText(this, "Add the asked field", Toast.LENGTH_SHORT).show()
}
}
}
解决方案
创建活动时,您的编辑文本可能为空。所以没有为您的按钮设置点击回调。您需要检查editText
回调clickListener
。
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding= ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.calculateButton.setOnClickListener {
if(binding.weightEditText.text.isNotEmpty() && binding.heightEditText.text.isNotEmpty()) {
val weight = binding.weightEditText.text.toString().toFloat()
val height = binding.heightEditText.text.toString().toFloat()
val myBMI = weight / (height * height)
binding.bmiValue.text = myBMI.toString()
if (myBMI < 18.5) {
binding.imageView.setImageResource(R.drawable.underweight)
} else if (myBMI >= 18.5 && myBMI < 24.9) {
binding.imageView.setImageResource(R.drawable.healthy)
} else if (myBMI >= 24.9 && myBMI < 29.9) {
binding.imageView.setImageResource(R.drawable.overweight)
} else if(myBMI>29.9) {
binding.imageView.setImageResource(R.drawable.obesity)
}
}else{
Toast.makeText(this, "Add the asked field", Toast.LENGTH_SHORT).show()
}
}
}
}
推荐阅读
- android - 清单合并失败:属性应用程序
- django - 如何在 Django 中编写 sql COALESCE
- python-3.x - 为什么 cv2.VideoCapture(1) 需要四秒钟来检测运动?
- ios - 在 Google 地图自定义信息视图中显示 JSON 数据
- c - 在C语言中,如果我只是声明一个变量而不初始化它,编译器会为它保留空间吗?
- c++ - 如果 head 在 main 中本地声明,则链表的 void 递归反向函数的参数应该是什么?
- threadpool - 如何在 hystrix 线程池中找到活动线程的数量?
- javascript - 如何在 JavaScript 中返回父函数
- elixir - 在 Elixir 中,有没有办法使 _real_ 常量?
- java - 为什么我需要在下面的代码中使用 count -=1 ?