Android计算器实现三输入自动计算并显示结果的技术咨询
实现三个输入框填满后自动计算并显示结果
要实现三个输入框都填入内容时自动计算,你可以给每个EditText添加文本变化监听(TextWatcher),每次输入变化时检查输入状态,满足条件就自动执行计算逻辑。同时优化原代码的异常处理,避免输入非数字时崩溃。
修改步骤
- 把计算逻辑抽离成独立方法,避免重复代码
- 给三个EditText绑定文本变化监听,实时检查输入状态
- 添加异常捕获,防止非数字输入导致程序崩溃
修改后的完整代码
package com.example.animate_hf; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.WindowManager; import android.widget.EditText; import android.widget.TextView; public class menu extends AppCompatActivity { private EditText txtnr1; private EditText editTextNumber2; private EditText editTextNumber3; private TextView textView5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getSupportActionBar().hide(); AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); txtnr1 = findViewById(R.id.txtnr1); editTextNumber2 = findViewById(R.id.editTextNumber2); editTextNumber3 = findViewById(R.id.editTextNumber3); textView5 = findViewById(R.id.textView5); // 给三个输入框绑定统一的文本变化监听 txtnr1.addTextChangedListener(inputWatcher); editTextNumber2.addTextChangedListener(inputWatcher); editTextNumber3.addTextChangedListener(inputWatcher); } // 复用的文本变化监听实例 private final TextWatcher inputWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { // 每次输入变化后检查三个输入框是否都有有效内容 String val1 = txtnr1.getText().toString().trim(); String val2 = editTextNumber2.getText().toString().trim(); String val3 = editTextNumber3.getText().toString().trim(); if (!val1.isEmpty() && !val2.isEmpty() && !val3.isEmpty()) { calculateAndDisplay(val1, val2, val3); } else { // 输入不完整时清空结果 textView5.setText(""); } } }; // 独立的计算与显示方法 private void calculateAndDisplay(String val1, String val2, String val3) { try { int valor1 = Integer.parseInt(val1); int valor2 = Integer.parseInt(val2); int valor3 = Integer.parseInt(val3); int result = (valor1 * valor2 * valor3) * 24; textView5.setText(String.valueOf(result)); } catch (NumberFormatException e) { // 输入非数字时给出提示 textView5.setText("请输入有效数字"); } } // 如果还需要保留点击触发计算的功能,可以取消下面的注释 /* public void multiply(View view) { String val1 = txtnr1.getText().toString().trim(); String val2 = editTextNumber2.getText().toString().trim(); String val3 = editTextNumber3.getText().toString().trim(); if (!val1.isEmpty() && !val2.isEmpty() && !val3.isEmpty()) { calculateAndDisplay(val1, val2, val3); } } */ }
关键说明
- TextWatcher:监听输入框文本变化,在
afterTextChanged中判断三个输入框是否都不为空,满足条件就自动计算 - 异常捕获:用
try-catch处理NumberFormatException,避免用户输入非数字时程序崩溃 - 逻辑抽离:把计算和显示逻辑单独封装,让代码更简洁易维护
- 输入不完整时清空结果,提升用户体验
内容的提问来源于stack exchange,提问作者HFix
相关产品推荐
相关产品推荐

