오류가 있습니다. 머리를 감쌀 수없는 것 같습니다. 나는 사용자가 EditText
에서 TextView
으로 텍스트를 보낼 수있는 앱을 작성 중이다. 사용자가 실수 한 경우 사용자는 스페이스 키를 눌러 EditText
에서 보낸 가장 최근 텍스트를 TextView
으로 가져올 수 있습니다. 때때로 작동하지만 다른 경우에는 IndexOutOfBounds
예외가 발생합니다.EditText.setText()는 인덱스가 경계를 벗어남을 나타냅니다.
에서 textInput는
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());
위의 코드 검사 사용자가 스페이스 키를 치면, 그래서 경우 (가장 최근 back1와) 최근 세 개의 문자열 back1,2,3 있습니다 글고입니다 그것으로 무엇을해야하는지. 사용자가 빈 EditText에서 스페이스를 누르면, 그들은 그들이 보낸 마지막 것을 얻습니다. 그들이 다시 우주 공간을 강타하면 그들이 보낸 마지막 물건을 얻습니다. 이것은 여전히 조금 거칠지 만, 당신이 아이디어를 얻길 바랍니다.
OutOfBounds 예외는 EditText
의 큰 항목을 가져 와서 공간을 뚫고 EditText
을 작은 문자열로 설정하면 발생합니다. 커서가 EditText
끝에 있고 더 작아 졌을 때 더 이상있을 수 없다고 가정 했으므로 setText()
전에 textInput.setSelection(0)
을 추가하려고했습니다. 그건 도움이되지 않았어. 또한 EditText
을 setText("")
으로 설정해 보았습니다. 그것도 작동하지 않았다. setText(back#)
의 행을 주석 처리하면 모든 것이 잘 동작합니다.
예 : 순서로 "안녕하세요", "안녕하세요"와 "안녕하세요"에
사용자 유형.
back3 = hello, back2 = hi 및 back1 = hey.
타격 공간 되돌아가 1보다 큰 back2 아마도 때문에 setSpan(3...4) ends beyond length 2
때문에, "안녕"
번째 탭 충돌 할 것이다 글고를 설정한다. the TextWatcher
documentation부터 EditText
에 "안녕하세요"
stacktrace를 게시하십시오. – FoamyGuy
전체 질문을 읽지는 않았지만 textInput.setSelection (textInput.getText(). toString(). length()); textInput.setSelection (textInput.getText(). toString(). 길이() - 1); –
아니요, small-> large에서 이동할 때 setSelection()이 예상대로 작동합니다. 게다가, 오류는 하나 이상입니다. –