我有一个错误,我似乎无法包裹我的头。我正在编写一个应用程序,允许用户将文本从EditText
发送到TextView
。如果用户犯了错误,用户可以点击空格键将EditText
发送的最新文本带到TextView
。这有时会起作用,但有时候,它会给我一个例外。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
的末尾,当文本变小时不再存在,所以我尝试在setText()
之前加上textInput.setSelection(0)
。这没有帮助。我也尝试将EditText
设置为setText("")
。那也行不通。如果我注释掉setText(back#)
的行,一切正常。
的例子:在“你好”,“嗨”和“嘿”
用户类型的顺序。
back3 = hello,back2 = hi,back1 = hey。
击中空间一旦将设置的EditText为“嘿”
第二抽头会崩溃,由于setSpan(3...4) ends beyond length 2
,大概是因为背部1大于back2大。它应该设置在EditText
为 “Hi”
发布stacktrace。 – FoamyGuy
我没有读完整个问题,但应该将textInput.setSelection(textInput.getText()。toString()。length());不是textInput.setSelection(textInput.getText()。toString()。length() - 1);? –
不,从小到大的时候,setSelection()按预期工作。此外,错误不止一次。 –