调用String方法会使TextWatcher中的应用程序崩溃

时间:2017-11-29 06:14:54

标签: android event-handling android-textwatcher

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

我尝试了以下内容:

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

我猜使用任何String方法都会导致崩溃,即使length()也是如此。我做错了什么?

1 个答案:

答案 0 :(得分:2)

在onTextChanged()

的回调中使用以下代码
  String text = charSequence.toString();
            if (text.length() >0) {
                Character character = text.charAt(text.length()-1);
                Character character1 = character;
                tv.setText(character1.toString());
            } else {
                // if you want to remove last character too then setText(""");
            }

希望有所帮助。