我想在Gridview图像中根据名称进行搜索,但是搜索过程非常慢!如何在gridview中加快速度?
我用于搜索操作的代码是:
搜索编辑文本操作侦听器:
editSearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence cs, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence cs, int start, int before,
int count) {
textlength = editSearch.getText().length();
array_sortnames.clear();
array_sortcodes.clear();
for (int i = 0; i < itemsNames.size(); i++) {
if (textlength <= itemsNames.get(i).length()) {
if (ProjectEngine
.getItemName(context, itemsNames.get(i))
.toLowerCase()
.contains(
editSearch.getText().toString()
.toLowerCase().trim())) {
array_sortnames.add(itemsNames.get(i));
array_sortcodes.add(imagePaths.get(i));
}
}
}
AppendList(array_sortnames, array_sortcodes);
}
});
}
AppendList更新GrtidView适配器:
public void AppendList(ArrayList<String> str, ArrayList<String> str2) {
customGridAdapter = new CustomGridViewAdapter(GridViewActivity.this,
layout, str2, columnWidth, str);
gridView.setAdapter(customGridAdapter);
}
将通知任何帮助,
这并不容易,您可以通过提取来减少函数调用
editSearch.getText().toString().toLowerCase().trim()
这个到可变
但是
ProjectEngine.getItemName(context,itemsNames.get(i)).toLowerCase
实际上,也许它在做一些复杂的事情。。。或者通常速度较慢的东西,你也应该阻止至少几毫秒,或者当一个搜索正在运行时,可以启动另一个搜索。。。因为人们的打字速度会比你的脚本快。。
editSearch.addTextChangedListener(new TextWatcher() {
private boolean isSearching=false;
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence cs, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence cs, int start, int before,
int count) {
if(this.isSearching==true) {
return;
}
String editText = editSearch.getText().toString().toLowerCase().trim();
this.isSearching=true;
textlength = editSearch.getText().length();
array_sortnames.clear();
array_sortcodes.clear();
try {
for (int i = 0; i < itemsNames.size(); i++) {
if (textlength <= itemsNames.get(i).length()) {
if (ProjectEngine
.getItemName(context, itemsNames.get(i))
.toLowerCase()
.contains(
editText)) {
array_sortnames.add(itemsNames.get(i));
array_sortcodes.add(imagePaths.get(i));
}
}
}
} catch(Exception e) {}
this.isSearching=false;
AppendList(array_sortnames, array_sortcodes);
}
});
}
使用这种方法可以减少开销,还有更多的事情可以考虑,因为当你输入时,除了正在运行的搜索之外,没有其他搜索,而且说"在搜索真正有意义之前,你至少需要3个字符"也是有用的,因为当有人点击"e"时,你可能会从你保存的内容中获得每个条目。。。这可能是…非常多:D