4

我在底部有多个edittext和一个textview,以便获得其中所写内容的总和,edittexts但我没有成功。我试过了,TextWatcher但它不起作用,例如,我在第一个 5 中写,在第二个 10 中我得到 16,因为它计数为 5+1+10。我也尝试了该onfocus方法,但最后一个问题仍然edittext没有更新结果。我真的不知道该怎么办。以前有人遇到过这个问题吗?TextWatcher 实现:

TextWatcher inputTextWatcher1 = new TextWatcher() {
             public void afterTextChanged(Editable s) {
                number = Integer.parseInt(s.toString());
                sum+=number;
                tv.setText("sum is "+sum);

}

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(final CharSequence s, int start, int before,
                    int count) {

            }

        };
4

2 回答 2

5

使用以下代码。我已经测试过它并且像魅力一样工作..

et1.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        if (s.length() > 0) {
            int number = Integer.parseInt(s.toString());
            ans -= number;
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
        int number = Integer.parseInt(s.toString());
        ans += number;
        txtOutput.setText("sum is " + ans);
    }
});

et2.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
        if (s.length() > 0) {
            int number = Integer.parseInt(s.toString());
            ans -= number;
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
        int number = Integer.parseInt(s.toString());
        ans += number;
        txtOutput.setText("sum is " + ans);
    }
});

在这里,ans必须0在使用前。et1并且et2EditText

逻辑

beforeTextChanged将在应用任何文本更改之前调用。就像你输入5一样,它返回""因为没有数据,然后如果你输入2,它返回5,因为它是之前输入的。所以这就是诀窍。

在添加任何值之前,只需从前一个值中减去它。否则你的逻辑是正确的。但是每次您在答案中添加数字时。这使您的答案错误。

益处

现在,如果你使用这个逻辑,那里有多少并不重要EditText。这将提供真实的答案。您只需要添加TextWatcher到每个 EditText。

于 2013-09-10T14:28:41.193 回答
0

可以说 - editText1 - firstNumber & editText2- secondNumber

    TextWatcher inputTextWatcher1 = new TextWatcher() {
             public void afterTextChanged(Editable s) {
                number1 = Integer.parseInt(editText1.getText().toString());
                number2 = Integer.parseInt(editText2.getText().toString());
                sum = number1 + number2;
                tv.setText("sum is "+sum);

     }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTextChanged(final CharSequence s, int start, int before,
                    int count) {

            }

        };
于 2013-09-10T14:25:08.710 回答