首页 > 解决方案 > 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()
        }
    }
}

标签: androidkotlin

解决方案


创建活动时,您的编辑文本可能为空。所以没有为您的按钮设置点击回调。您需要检查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()
            }
        }
    }
}

推荐阅读