我有一个错误,我似乎无法理解。我正在编写一个应用程序,允许用户将文本从a 发送EditText
到 a 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
并且当文本变小时不再存在,所以我尝试textInput.setSelection(0)
在setText()
. 那没有帮助。我也尝试设置EditText
为setText("")
. 那也没有用。如果我注释掉 的行setText(back#)
,一切正常。
一个例子:
用户按顺序输入“hello”、“hi”和“hey”。
back3 = 你好,back2 = 你好,back1 = 你好。
点击空格一次会将 EditText 设置为“嘿”
第二次点击会崩溃,因为setSpan(3...4) ends beyond length 2
,大概是因为 back 1 大于 back2。应该将文本中的文本设置EditText
为“hi”