gpt4 book ai didi

android - TextWatcher.afterTextChanged 在退格后有不正确的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:03 27 4
gpt4 key购买 nike

我正在使用 TextWatcher 来监听按键输入。当用户键入“@”时,我会打开一个列表 Activity ,用户必须从列表中进行选择。选择后,我将所选项目的文本(包括初始@)放置到编辑文本中,然后继续进行正常编辑。

问题是,当我按下退格键时,我在 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 中,我输入“@”, Activity 弹出,我选择“James”。 EditText 现在显示@James。如果我按一次或两次退格键,当 EditText 显示 @Jam 时,listactivity 会再次弹出。

PS:afterTextChanged() 有时会被调用两次以退格(或任何键),在第二次执行 afterTextChanged() 时我得到错误的输入字符串。在第一次执行 afterTextChanged() 时,我得到了@Jam,在第二次执行时,我得到了“@”,因此弹出了 listactivity。

问题:为什么 afterTextChanged() 被调用两次,为什么在第二次执行时我得到错误的文本?

非常感谢。

最佳答案

我遇到了完全相同的问题。我不知道是什么原因导致带有 0 长度可编辑/字符序列的额外错误回调。

我一直在寻找 EditText 的更改,但实际上导致了一个空的 EditText。我最终不得不实现一个处理程序来在 500 毫秒后检查 EditText 的长度。您可能必须将 edittext 设为静态或最终。它应该看起来像这样:

     final Handler handler =new Handler();
final Runnable r = new Runnable(){

@Override
public void run()
{
//

String str = editText.getText().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);
}
}
}
} ;



editText.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
{

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3)
{

}

@Override
public void afterTextChanged(Editable s)
{

handler.postDelayed(r,500);

}
});

关于android - TextWatcher.afterTextChanged 在退格后有不正确的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14766422/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com