Android 调用字符串方法会使TextWatcher中的应用程序崩溃

Android 调用字符串方法会使TextWatcher中的应用程序崩溃,android,event-handling,android-textwatcher,Android,Event Handling,Android Textwatcher,我正在尝试检索在EditText视图中按下的键,并将其设置为同一活动中TextView的文本。例如,如果最后按下的键是字母“t”,则我希望“t”显示在文本视图中(而不是整个字符序列) 我尝试了以下方法: phoneInput.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int afte

我正在尝试检索在
EditText
视图中按下的键,并将其设置为同一活动中
TextView
的文本。例如,如果最后按下的键是字母“t”,则我希望“t”显示在
文本视图中(而不是整个字符序列)

我尝试了以下方法:

phoneInput.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        tracker.setText(s.charAt(start));
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});
这导致了一场车祸。我不确定,但看起来
start
是上次按键时追加的字符的索引,因此
TextView
应该显示在
EditText
中输入的最后一个字符

我也试过:

phoneInput.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        String sequence = s.toString();
        tracker.setText(sequence.charAt(sequence.length() - 1));
    }

    @Override
    public void afterTextChanged(Editable s) {}
});

我猜使用任何字符串方法都会导致崩溃,即使是
length()
。我做错了什么?

你必须这样尝试

editText.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) {
                textView.setText(String.valueOf(charSequence.charAt(i1)));
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

你必须这样尝试

editText.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) {
                textView.setText(String.valueOf(charSequence.charAt(i1)));
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

在调用onTextChanged()时使用以下代码


希望对您有所帮助。

在调用onTextChanged()时使用以下代码


希望能有所帮助。

@IntelliJAmiya不!不适合我。请看我的帖子,这会有帮助的you@IntelliJAmiya不!没有为我工作。请看我的帖子,它将帮助你是的!它成功了。但你能进一步解释一下吗?为什么会崩溃,为什么你的解决方案有效?你能解释一下崩溃的原因吗?1)第一行将代码转换为字符串,这是非常直接的2)第二行用于获取最后一个字符返回字符,所以我在字符引用中得到了它。如果获取字符并保存在整数变量中,则表示获取该字符的ascii码并将其保存在整数变量中。如果你用int来表示这个字符,很明显这是错误的。您需要将ascii码转换为实际字符,然后我将该字符转换为(您也可以不转换该字符),并在文本视图上设置该字符串。如果没有,希望我回答您的问题,请随时询问,但是,在清除最后一个字符的同时(通过单击并按住退格键或在只剩下一个要删除的字符时单击退格键),我的应用程序崩溃。我想我可以解决。如果我不能解决,我会再次询问。此外,我认为您的解决方案中的第三行是多余的。谢谢!是的!它成功了。但您能进一步解释吗?为什么会崩溃,为什么您的解决方案有效?您能解释一下崩溃吗?1)第一行将代码转换为字符串,这是非常直接的2)第二行用于获取最后一个字符返回字符,所以我在字符引用中得到了它。如果获取字符并保存在整数变量中,则表示获取该字符的ascii码并将其保存在整数变量中。如果你用int来表示这个字符,很明显这是错误的。您需要将ascii码转换为实际字符,然后我将该字符转换为(您也可以不转换该字符),并在文本视图上设置该字符串。如果没有,希望我回答您的问题,请随时询问,但是,在清除最后一个字符的同时(通过单击并按住退格键或在只剩下一个字符要删除时单击退格键),我的应用程序崩溃。我想我可以解决这个问题。如果我不能解决,我会再次询问。此外,我认为您的解决方案中的第三行是多余的。谢谢!在您的解决方案中,当退格为“键入”时,应用程序崩溃。此外,它只显示在EditText中输入的第一个字母。后续按键不会更改TextView的值。在您的解决方案中,当退格为“键入”时,应用程序崩溃。此外,它只显示在EditText中输入的第一个字母。后续按键不会更改TextView的值。