У меня ошибка. Кажется, я не могу обернуть голову. Я пишу приложение, которое позволяет пользователю отправлять текст с EditText
на номер TextView
. Если пользователь допустил ошибку, пользователь может нажать клавишу пробела, чтобы принести самый последний текст, отправленный с EditText
в TextView
. Это работает иногда, но в других случаях это дает мне исключение IndexOutOfBounds
.EditText.setText() дает индекс за пределами
TextInput является EditText, back1,2,3 три самые последние строки (с back1 самых последних)
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(count==1&&before==0&&s.toString().equals(" ")){
textInput.setText(back1);
}else if(s.toString().equals(back1 + " ")){
textInput.setText(back2);
}else if(s.toString().equals(back2 + " ")){
textInput.setText(back3); //causes error if back2 > back3
}
textInput.setSelection(textInput.getText().toString().length());
Приведенный выше код проверяет, если пользователь ударил клавишу пробела, и если да, Что с этим делать. Если пользователь нажал пробел на пустой EditText, они получают последнее отправленное им сообщение. Если они снова попадут в космос, они получат следующее последнее сообщение, которое они отправили, и так далее. Это все еще немного грубо, но я надеюсь, что вы получите эту идею.
Исключение OutOfBounds исходит из взятия большого элемента в поле EditText
, пробегающего пробел и установки EditText
на меньшую строку. Я предположил, что это потому, что курсор находится в конце EditText
и больше не может быть там, когда текст становится меньше, поэтому я попытался добавить textInput.setSelection(0)
прямо перед setText()
. Это не помогло. Я также попытался установить EditText
на setText("")
. Это тоже не сработало. Если я прокомментирую строки setText(back#)
, все будет хорошо.
Пример:
типыпользователя в «Привет», «Привет» и «Эй» в этом порядке.
задний3 = привет, задний2 = привет, и задний1 = эй.
задерживаясь пространство сразу задаст EditText к «эй»
Второй кран будет врезаться, так как setSpan(3...4) ends beyond length 2
, предположительно потому, что назад 1 больше, чем Назад2. Предполагается установить текст в EditText
на "привет"
Опубликовать stacktrace. – FoamyGuy
Я не прочитал весь вопрос, но должен строка textInput.setSelection (textInput.getText(). ToString(). Length()); not textInput.setSelection (textInput.getText(). toString(). length() - 1) ;? –
Нет, setSelection() работает как ожидается при переходе от маленького> большого. Кроме того, ошибка более чем одна. –