You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android计算器实现三输入自动计算并显示结果的技术咨询

实现三个输入框填满后自动计算并显示结果

要实现三个输入框都填入内容时自动计算,你可以给每个EditText添加文本变化监听(TextWatcher),每次输入变化时检查输入状态,满足条件就自动执行计算逻辑。同时优化原代码的异常处理,避免输入非数字时崩溃。

修改步骤

  1. 把计算逻辑抽离成独立方法,避免重复代码
  2. 给三个EditText绑定文本变化监听,实时检查输入状态
  3. 添加异常捕获,防止非数字输入导致程序崩溃

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:30:33