加快搜索GridView图像名称-Android
我想根据名字在Gridview图像中搜索,但是,搜索过程非常缓慢!如何在gridview中加速 我用于搜索操作的代码是: 搜索编辑文本操作侦听器:加快搜索GridView图像名称-Android,android,gridview,Android,Gridview,我想根据名字在Gridview图像中搜索,但是,搜索过程非常缓慢!如何在gridview中加速 我用于搜索操作的代码是: 搜索编辑文本操作侦听器: editSearch.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { } @Override public void bef
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);
}
});
}
public void AppendList(ArrayList<String> str, ArrayList<String> str2) {
customGridAdapter = new CustomGridViewAdapter(GridViewActivity.this,
layout, str2, columnWidth, str);
gridView.setAdapter(customGridAdapter);
}
editSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
公共无效后文本已更改(可编辑){
}
@凌驾
更改前的公共无效(字符序列cs,int start,
整数计数,整数后){
}
@凌驾
public void onTextChanged(字符序列cs,int start,int before,
整数计数){
textlength=editSearch.getText().length();
数组_sortnames.clear();
数组_sortcodes.clear();
对于(int i=0;i 如果(textlength说起来不那么容易,那么可以通过提取
editSearch.getText().toString().toLowerCase().trim()
这是一个变量
但重要的是什么
ProjectEngine.getItemName(上下文,itemsNames.get(i)).toLowerCase()包含(editSearch.getText().toString().toLowerCase().trim())
实际上是这样的,也许它正在做一些复杂的事情…或者通常是缓慢的事情,你也应该阻止至少几毫秒,或者当一个搜索正在运行时,可以启动另一个搜索…因为人们键入的速度会快,你的脚本无论如何都可以跟上
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);
}
});
}
editSearch.addTextChangedListener(新的TextWatcher(){
私有布尔isSearching=false;
@凌驾
公共无效后文本已更改(可编辑){
}
@凌驾
更改前的公共无效(字符序列cs,int start,
整数计数,整数后){
}
@凌驾
public void onTextChanged(字符序列cs,int start,int before,
整数计数){
if(this.isSearching==true){
返回;
}
String editText=editSearch.getText().toString().toLowerCase().trim();
这个.isSearching=true;
textlength=editSearch.getText().length();
数组_sortnames.clear();
数组_sortcodes.clear();
试一试{
对于(int i=0;i 如果(textlength我不理解这个,请“你应该阻止至少几毫秒或一毫秒…”!谢谢你的回答,也谢谢你的方式(使用faces和fun:)…!为了进一步优化,我只需要了解更多关于此函数之外发生的事情:)但我希望它能帮助并防止您的搜索中断请注意您的答案,,是的,它确实帮助了我..尽管现在我在其他原因的错误和bug列表中:)…再次感谢@Soulan以您的方式回答…一点问题也没有,我刚刚又做了一件事,实际上减少了所需的函数调用,这可能会有一点不同…但这也取决于您要搜索的数据量,所以祝您好运:)