如何在EditText文本更改时改变TextView的文本?

8
我有一个EditText输入框,用户可以在其中输入内容。当用户输入文本时,我需要在下方放置的TextView中显示输入的文本。
例如:如果用户在EditText框中输入任何字符,我需要在TextView中显示相同的字符。同样地,如果用户从EditText中删除任何字符,我需要从TextView中删除相同的字符。(最终,我希望在EditText的文本更改时更改TextView的文本)。我希望我的要求现在清楚了。我该如何实现这一点?请指导我。

看看这个链接:http://www.andreabaccega.com/blog/2010/10/09/onchange-event-on-edittext-in-android/ - Urho
4个回答

23

将TextWatcher添加到EditText中,在afterTextChanged()方法中执行操作。

http://developer.android.com/reference/android/text/TextWatcher.html
TextWatcher inputTextWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) { 
                textview.setText(s.toString());
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){
    }
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }
};

editText.addTextChangedListener(inputTextWatcher);

5
您应该重写这个方法:
editText.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) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        if(editText.getText().length() >= 0) {
            textView.setText(editText.getText().toString())
        } 
    }
});

专家们,我想以同样的方式从数据库中填充TextView详细信息,针对EditText输入。例如,我的表详细信息列1为Alex,列2为12。当我输入EditText值12时,TextView应该显示Alex,而无需任何按钮点击,如键盘输入检测。 - Leace

4
edtText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
            }

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

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                if (!edtText.getText().toString().equalsIgnoreCase("")){

                    // here textview.setText(edtText.getText());

                }
            }
        });
    }

0
解决方案是通过使用addTextChangedListener()函数将TextWatcher添加到EditText中。在TextWatcher中,您需要根据要执行这些操作的时间,在afterTextChanged()beforeTextChanged()onTextChanged()这三个函数中编写转换/验证逻辑。

如果使用Kotlin,您可以像这样做:

editText.addTextChangedListener(object : android.text.TextWatcher {
        override fun afterTextChanged(s: Editable?) {

        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        }

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            s?.let { textView.text = s.toString() }
        }
    })

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