Android 如何使用文本监视程序在3个文本之间进行匹配?

Android 如何使用文本监视程序在3个文本之间进行匹配?,android,calculator,android-textwatcher,Android,Calculator,Android Textwatcher,我的代码如下所示。但它不起作用。我需要执行简单的加法和减法,根据这两个字段的输入。。。。问题结束了 我需要写这篇文章,因为如果细节不够,代码不仅仅是细节,我不能问这个问题。所以我只是打这个来问我的问题。忽略它,看看下面的代码。多谢各位 Java代码: package com.test.easycount; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.

我的代码如下所示。但它不起作用。我需要执行简单的加法和减法,根据这两个字段的输入。。。。问题结束了

我需要写这篇文章,因为如果细节不够,代码不仅仅是细节,我不能问这个问题。所以我只是打这个来问我的问题。忽略它,看看下面的代码。多谢各位

Java代码:

package com.test.easycount;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements TextWatcher {

    EditText num1, num2, sum;
    int fnumber, snumber, total;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        num1 = (EditText) findViewById(R.id.num1);
        num2 = (EditText) findViewById(R.id.num2);
        sum = (EditText) findViewById(R.id.sum);

        num1.addTextChangedListener(this);
        num2.addTextChangedListener(this);
        sum.addTextChangedListener(this);

        fnumber = Integer.parseInt(num1.getText().toString());
        snumber = Integer.parseInt(num2.getText().toString());
        total = Integer.parseInt(sum.getText().toString());
    }

    @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) {

        if (num1.getText().toString().length() > 0 && num2.getText().toString().length() > 0) {

            total = fnumber + snumber;
            sum.setText(Integer.toString(total));

        } else if (num1.getText().toString().length() > 0 && sum.getText().toString().length() > 0) {

            snumber = total - fnumber;
            num2.setText(Integer.toString(snumber));
        } else if (num2.getText().toString().length() > 0 && sum.getText().toString().length() > 0) {

            fnumber = total - snumber;
            num1.setText(Integer.toString(fnumber));
        }
    }
}

请帮助我执行此操作……

删除初始化变量并将它们粘贴到
后文本更改中

  @Override
            public void afterTextChanged(Editable s) {

        try {
             fnumber = Integer.parseInt(num1.getText().toString());
        } catch (NumberFormatException e) {
            fnumber = 0;
            Log.e("numberFormat", e.toString());
        }

        try {
            snumber = Integer.parseInt(num2.getText().toString());
        } catch (NumberFormatException e) {
            snumber = 0;
            Log.e("numberFormat", e.toString());
        }

        try {
            total = Integer.parseInt(sum.getText().toString());
        } catch (NumberFormatException e) {
            total = 0;
            Log.e("numberFormat", e.toString());
        }

      if (num1.getText().toString().length() > 0 && num2.getText().toString().length() > 0) {

                    total = fnumber + snumber;
                    sum.setText(Integer.toString(total));

                } else if (num1.getText().toString().length() > 0 && sum.getText().toString().length() > 0) {

                    snumber = total - fnumber;
                    num2.setText(Integer.toString(snumber));
                } else if (num2.getText().toString().length() > 0 && sum.getText().toString().length() > 0) {

                    fnumber = total - snumber;
                    num1.setText(Integer.toString(fnumber));
                }
            }

您必须在textWatcher中计算fnumber、snumber和total:

假设:

    @Override
    public void afterTextChanged(Editable s) {

        if (num1.getText().toString().length() > 0 && num2.getText().toString().length() > 0) {
            fnumber = Integer.parseInt(num1.getText().toString());
            snumber = Integer.parseInt(num2.getText().toString());
            total = fnumber + snumber;
            sum.setText(Integer.toString(total));

        } else if (num1.getText().toString().length() > 0 && sum.getText().toString().length() > 0) {
            fnumber = Integer.parseInt(num1.getText().toString());
            total = Integer.parseInt(sum.getText().toString());
            snumber = total - fnumber;
            num2.setText(Integer.toString(snumber));

        } else if (num2.getText().toString().length() > 0 && sum.getText().toString().length() > 0) {
            snumber = Integer.parseInt(num2.getText().toString());
            total = Integer.parseInt(sum.getText().toString());
            fnumber = total - snumber;
            num1.setText(Integer.toString(fnumber));
        }
}
并从onCreate中删除fnumber、snumber和total初始化

为了便于计算,最好对每个edittext使用单独的textWatcher:

例:


文本更改后,您必须再次获取fnumber、snumber和total。否。它不起作用。。。在EditText中输入值时应用程序崩溃。我现在该怎么办???是否为其他编辑文本指定值?因为当我输入第一个值时,它是空的。我如何进行验证??你能帮忙吗?如果我输入第二个值,应用程序就关闭了。为什么?添加单独的文本监视程序。最好是计算一下。我只是把它加上作为答案@jde
num1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });