在Android中如何在EditText输入时更新TextView?

4

我在底部有多个EditText和一个TextView,想要获取这些EditText中所填内容的总和,但是我没有成功。我试过使用TextWatcher,但它无法达到预期效果,例如我在第一个EditText中写入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) {

            }

        };

你能在这里发布你的TextWatcher实现吗? - Vishal Pawale
检查一下我的答案。我已经测试过了,而且运行得非常好。 :) - Chintan Rathod
2个回答

6
使用以下代码。我已经测试过并且像魅力一样运行。
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 必须为 0et1et2EditText

逻辑

beforeTextChanged 在应用任何文本更改之前调用。例如您输入5,则返回"",因为没有数据,然后如果您输入2,则返回5,因为它先前输入过。所以这是一个技巧。

在添加任何值之前,只需从先前的值中减去它。否则,您的逻辑是正确的,但每次都将数字加入答案中。这使您的答案变得不正确。

好处

现在,如果您使用此逻辑,则不管有多少个 EditText,都会提供正确的答案。您只需要为每个EditText添加TextWatcher


1
@ChintanRathod,我给你点赞。做得好。 :) - Ritesh Gune
1
负面投票者。请添加评论,以便我可以改进我的答案。 - Chintan Rathod

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

            }

        };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接