searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged( CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(final CharSequence charSequence, int i, int i1, int i2) {
ArrayList<ProductInformation> newList = new ArrayList<>();
for (ProductInformation info : currentList)
if (info.getName().contains(charSequence))
newList.add(info);
productListAdapter.setNewData(newList);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
将此侦听器
添加到我的edittext
后,它在键入时会出现滞后。我猜问题是在列表中搜索(列表中有40到60个项目)。
我能做什么?
实时文本搜索对于更好的性能有一些要求:
要求
>
您不应该立即开始搜索,因为用户键入的速度相当快,下一个结果会立即覆盖上一个结果。运行多个搜索进程,但只显示最后一个结果会浪费性能。
private Timer mRequestDelayTimer;
private TimerTask mSearchTask;
@Override
public void onTextChanged(final CharSequence query, int i, int i1, int i2) {
if (mRequestDelayTimer != null)
mRequestDelayTimer.cancel();
// If you do a async search, stop it here
stopSearch();
mRequestDelayTimer = new Timer();
mSearchTask = new TimerTask() {
@Override
public void run() {
startSearch(query);
}
};
mRequestDelayTimer.schedule(mSearchTask, 500);
}
private synchronized void startSearch(String query) {
// This is not run in UI thread. Use activity.runOnUiThread if you want to update the UI
// Call an AsyncTask to do an async search or run a sync loop search here
//ArrayList<ProductInformation> newList = new ArrayList<>();
//for (ProductInformation info : currentList)
// if (info.getName().contains(charSequence))
// newList.add(info);
//productListAdapter.setNewData(newList);
}
解释
如果输入的每个字符都在500ms以内,它就不会调用startSearch,因为计时器一直在延迟。
如果用户Rest超过500ms,则startsearch
将被调用离开UI线程。然后如果用户在搜索仍在进行时开始键入,则会取消。
如果您在ArrayAdapter
中执行搜索和更新结果,它内置了Filter
进程,则可以通过重写GetFilter
来自定义它。这个过滤器自动在后台运行,为每个字符输入做取消,非常方便。参考:android中自定义ArrayAdapter中的自定义getFilter
我正在使用此链接中的自定义日历。它可以工作,但除了当月之外,所有月份的日期都被灰色化了。我想显示所有的月份时,就像第二个截图。但是除了当月(即四月)以外的所有月份都是灰色的。谁能帮助我在显示每个月像第二个截图和不像第一个截图?
问题内容: 我有点迷茫,无法做到最快。我有一大堆具有基本变量属性的对象(带有getters / setters方法),我需要在此列表中进行搜索以找到列表中与给定参数匹配的对象 我已经找到了如何进行常规列表搜索的方法,但是我需要进行搜索,例如搜索列表中每个对象的调用getName()的结果的值,并获取结果与我的输入匹配的对象。 如下所示,第三个参数是方法调用的结果,第二个是我要查找的结果。 任何建议
问题内容: 假设我正在创建一个简单的类以类似于C样式的结构工作,只保存数据元素。我试图弄清楚如何在对象列表中搜索属性等于某个值的对象。下面是一个简单的示例,以说明我要执行的操作。 例如: 我将如何搜索myList列表以确定它是否包含n == 5的元素? 我一直在谷歌搜索和搜索Python文档,我想我可以通过列表理解来做到这一点,但是我不确定。我可能还要补充一点,我必须使用Python 2.4.3,
我有两个清单,例如: 列表1:只有一个元素 列表2:有1000个对象 注意:矩阵是字符串集合(例如:abc,定义,ghi) 问题: 在列表1中只有1个元素,而在列表2中有1000个。我需要检查所有这1000个元素才能找到1个元素吗? 有没有更好的办法?
问题内容: 用Python的方式搜索或操作排序序列是什么? 问题答案: 是标准库的一部分-您正在寻找这种东西吗?
我正在尝试使用TextWatcher界面,以检测哪个EditText被更改了。我有一个使用10个EditTexts的活动,为每个文本使用10个TextWatchers看起来很奇怪。 有没有办法只使用一个TextWatcher,并在函数afterTextChanged中的可编辑项上使用switch语句?