Android Kotlin如何获取EditText输入值计算后展示结果
Android Fragment中获取EditText输入值完成计算的实现方案
原有代码核心错误
- 继承关系错误:
Fragment不能继承MainActivity(Activity类),必须继承androidx.fragment.app.Fragment - 生命周期使用错误:
Fragment不能直接调用setContentView加载布局,需在onCreateView中返回加载的视图实例,初始化操作放在onViewCreated中执行 - EditText取值错误:直接调用
parameter1.toString()获取的是EditText控件对象的字符串描述,不是用户输入内容,正确取值方式是edittext.text.toString() - 调用逻辑错误:按钮点击监听中调用了不存在的无参
result()方法,没有执行取值转换逻辑 - 缺少异常防护:输入为空、输入非整数时直接调用
toInt()会直接抛出异常导致应用崩溃 - 冗余逻辑:已经接入ViewBinding的前提下,不需要额外调用
findViewById查找控件
修正后完整实现代码
import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment // 替换成你自己项目下的Binding类导入路径 import com.your.package.databinding.FragmentCheckSkillBinding class CheckSkillsFragment : Fragment() { // ViewBinding实例,onDestroyView时置空避免内存泄漏 private var _binding: FragmentCheckSkillBinding? = null private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentCheckSkillBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // 绑定计算按钮点击事件 binding.sumCreatureButton.setOnClickListener { calculateAndShowResult() } } private fun calculateAndShowResult() { // 获取三个输入框的文本内容,自动去除首尾空格 val paramInput = binding.parameterFirstPlayerEdittext.text.toString().trim() val skillInput = binding.skillFirstPlayerEdittext.text.toString().trim() val modifierInput = binding.modifierFirstPlayerEditText.text.toString().trim() // 空值校验 if (paramInput.isEmpty() || skillInput.isEmpty() || modifierInput.isEmpty()) { Toast.makeText(requireContext(), "请填写所有数值后再计算", Toast.LENGTH_SHORT).show() return } // 数字格式校验+计算 try { val valueX = paramInput.toInt() val skillValue = skillInput.toInt() val modifierValue = modifierInput.toInt() val randomValue = (0..6).random() val finalResult = valueX + skillValue + modifierValue + randomValue Toast.makeText(requireContext(), "计算结果:$finalResult", Toast.LENGTH_SHORT).show() } catch (e: NumberFormatException) { Toast.makeText(requireContext(), "请输入合法的整数数值", Toast.LENGTH_SHORT).show() } } override fun onDestroyView() { super.onDestroyView() _binding = null } }
优化建议
- 布局中的三个EditText建议添加
android:inputType="number"属性,直接唤起数字键盘,从源头减少用户输入非数字内容的概率 - 不要使用已经废弃的kotlin-android-extensions插件,ViewBinding是目前官方推荐的视图绑定方案
- 如果需要支持小数计算,把
toInt()替换为toDouble()即可,对应调整inputType为numberDecimal
内容的提问来源于stack exchange,提问作者Twitcher
相关产品推荐
相关产品推荐

