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

时间:2014-08-27 08:53:50

标签: android gridview

我想根据名称搜索Gridview图像,但搜索过程非常慢!如何在gridview中加速它?

  

我用于搜索操作的代码是:

搜索EditText操作侦听器:

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);
}

任何帮助都会得到满足,

1 个答案:

答案 0 :(得分:1)

这并不容易说,您可以通过提取

来减少函数调用
  

editSearch.getText()。的toString()。toLowerCase()。修剪()

这是变量

但重要的是

  

ProjectEngine.getItemName(上下文,itemsNames.get(I))。toLowerCase()。包含(editSearch.getText()。的toString()。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);
        }
    });
}

使用这种方法可以减少开销,可以考虑更多的东西,因为当你输入时没有其他搜索,然后是正在运行的搜索,也可以说&#34;你需要在在搜索实际上有意义之前至少3个字符&#34;因为有人打了一个&#34; e&#34;你可能从你所保存的东西中得到每一个条目......这可能是......非常多:D