加快搜索GridView图像名称-Android

加快搜索GridView图像名称-Android,android,gridview,Android,Gridview,我想根据名字在Gridview图像中搜索,但是,搜索过程非常缓慢!如何在gridview中加速 我用于搜索操作的代码是: 搜索编辑文本操作侦听器: editSearch.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { } @Override public void bef

我想根据名字在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);
        }
    });
}
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以您的方式回答…一点问题也没有,我刚刚又做了一件事,实际上减少了所需的函数调用,这可能会有一点不同…但这也取决于您要搜索的数据量,所以祝您好运:)