我需要你的帮助。我有 EditText 字段,它充当搜索字段,用于搜索列表中的许多项目。现在我使用 TextWatcher 的 afterTextChanged(Editable s) 方法,但它对我来说并不完美。在快速输入和擦除之后的某些时候,下一个搜索过程并不涉及用户输入的所有文本。原因是在漫长的搜索过程中,我无法缩短它。就我而言,我需要知道,wnen 用户完全结束了他的输入,但是 afterTextChanged() 处理每个符号更改。我会欣赏任何想法。谢谢!
问问题
7216 次
3 回答
7
我猜您正在使用 a 是TextWatcher
因为您想进行实时搜索。在这种情况下,您无法知道用户何时完成输入,但您可以限制搜索频率。
这是一些示例代码:
searchInput.addTextChangedListener(new TextWatcher()
{
Handler handler = new Handler();
Runnable delayedAction = null;
@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( final Editable s)
{
//cancel the previous search if any
if (delayedAction != null)
{
handler.removeCallbacks(delayedAction);
}
//define a new search
delayedAction = new Runnable()
{
@Override
public void run()
{
//start your search
startSearch(s.toString());
}
};
//delay this new search by one second
handler.postDelayed(delayedAction, 1000);
}
});
知道输入是否结束的唯一方法是让用户按下回车键或搜索按钮或其他东西。您可以使用以下代码侦听该事件:
searchInput.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction( TextView v, int actionId, KeyEvent event)
{
switch (actionId)
{
case EditorInfo.IME_ACTION_SEARCH:
//get the input string and start the search
String searchString = v.getText().toString();
startSearch(searchString);
break;
default:
break;
}
return false;
}
});
只需确保添加android:imeOptions="actionSearch"
到EditText
布局文件中。
于 2012-06-05T16:26:38.473 回答
1
你需要的是 TextWatcher
http://developer.android.com/reference/android/text/TextWatcher.html
于 2012-06-05T15:38:21.263 回答
0
我通常这样做是使用onFocusChange
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// Do your thing here
}
}
});
这有一个缺点,即用户必须离开edittext字段,所以我不确定它是否适合你想要做的事情......
于 2012-06-05T16:31:20.563 回答