【发布时间】:2012-07-03 21:16:02
【问题描述】:
我遇到了一个我似乎无法理解的错误。我正在编写一个应用程序,允许用户将文本从EditText 发送到TextView。如果用户出错,用户可以按空格键将EditText 发送的最新文本带到TextView。这有时有效,但其他时候,它给了我一个IndexOutOfBounds 异常。
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 的末尾并且当文本变小时不再存在,所以我尝试在setText() 之前添加textInput.setSelection(0)。那没有帮助。我还尝试将EditText 设置为setText("")。那也没有用。如果我注释掉setText(back#) 的行,一切正常。
一个例子:
用户按“hello”、“hi”和“hey”的顺序输入。
back3 = hello,back2 = hi,back1 = hey。
点击空格一次会将 EditText 设置为“嘿”
第二次点击会崩溃,因为setSpan(3...4) ends beyond length 2,大概是因为后退1大于后退2。它应该将EditText中的文本设置为“hi”
【问题讨论】:
-
我没有阅读整个问题,但应该行 textInput.setSelection(textInput.getText().toString().length());不是 textInput.setSelection(textInput.getText().toString().length() - 1);?
-
不,setSelection() 在从 small->large 开始时按预期工作。此外,错误不止一个。
标签: android android-edittext indexoutofboundsexception