如何在android中输入edittext时更新textview

时间:2013-09-10 14:10:35

标签: android android-edittext

我在底部有多个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) {

            }

        };

2 个答案:

答案 0 :(得分:4)

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

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 < / strong>正如之前输入的那样。所以这就是诀窍。

在添加任何值之前,只需从前一个值中减去它。否则你的逻辑是真的。但每次你在答案中添加数字。这使你的答案变得虚假。

<强>效益

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

答案 1 :(得分:0)

让我们说 - editText1 - firstNumber&amp; 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) {

            }

        };