我正在使用 TextWatcher 来收听关键输入。当用户键入“@”时,我打开一个列表活动,用户必须从列表中进行选择。选择后,我将所选项目的文本(包括初始 @)放置到 edittext 并继续正常编辑。
问题是当我按下退格键时,我在 aftertextchanged 事件中得到的字符串是错误的,并且 listactivity 再次弹出。
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void afterTextChanged(Editable s)
{
String str = s.toString();
if (str.length() > 0)
{
if (str.substring(str.length() - 1).equals("@"))
{
Intent i = new Intent(MessageComposeActivity.this, MembersListActivity.class);
startActivityForResult(i, Util.MEMBERS_LIST);
}
}
}
});
在 onActivityResult 中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Util.MEMBERS_LIST)
if (resultCode == RESULT_OK)
{
editText.setText(editText.getText().toString() + data.getExtras().get("screenname") + " ");
editText.setSelection(editText.getText().length());
}
}
例如:
在 EditText 中,我键入“@”,然后会弹出活动并选择“James”。EditText 现在显示@James。如果我按退格键一次或两次,则在 EditText 显示@Jam 时再次弹出列表活动。
PS:afterTextChanged() 有时会为退格(或任何键)调用两次,在第二次执行 afterTextChanged() 时,我得到错误的输入字符串。在第一次执行 afterTextChanged() 时,我得到了@Jam,在第二次执行时,我得到了“@”,因此会弹出 listactivity。
问题: 为什么 afterTextChanged() 被调用两次,为什么在第二次执行时我得到错误的文本?
非常感谢。