加快GridView图像名称的搜索-Android



我想在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

最新更新