实时搜索在android listview中无法正常工作

时间:2015-06-17 10:15:35

标签: android search android-listview android-search

我正在尝试在列表视图上执行搜索操作。当我输入我的列表中不存在的字符或字符串时,我的代码完美地工作(即它没有显示任何内容,因为没有找到匹配)但是,当我输入列表中存在的名称时,无论在哪个位置name存在我的代码只显示列表视图中的第一条记录。这是我的搜索操作代码:

 NameListAdapter = new MyAdapter(this,
                    android.R.layout.simple_list_item_1,NameArrayList
                    );
            lvSearch.setAdapter(NameListAdapter);
            editTextSearch.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                    NameListAdapter.getFilter().filter(cs);
                }
                @Override
                public void beforeTextChanged(CharSequence cs, int arg1, int arg2,
                                              int arg3) {
                }
                @Override
                public void afterTextChanged(Editable cs) {
                }
            });

请尽快帮助。谢谢你

2 个答案:

答案 0 :(得分:0)

我解决了这个问题,而不是使用系统过滤器,我使用自己的过滤器进行搜索。我的代码中进行了以下更改:

@Override
                public void onTextChanged(CharSequence cs, int arg1, int arg2,
                                          int arg3) {

                    String text = edSearch.getText().toString();
                    NameListAdapter.filter(text);
                }

并添加了此过滤器方法:

 // Filter method for search
    public void filter(String charText) {
        charText = charText.toLowerCase(Locale.getDefault());
        NameArrayList.clear();
        int j;
        if (charText.length() == 0) {
            NameArrayList.addAll(arrayList);
        }
        else
        {
            NameArrayList.clear();
            for (j=0;j<arrayList.size();j++)
            {

           if(arrayList.get(j).toLowerCase(Locale.getDefault()).contains(charText))
                {
                    NameArrayList.add((arrayList.get(j)));
                }
            }
        }
        notifyDataSetChanged();
    }

答案 1 :(得分:0)

我没有创建这种耗时的过滤方法。 。NameListAdapter.getFilter()过滤器(CS);如果NameArrayList是ArrayAdapter的类型,它也将起作用。

感谢。