如何在Listview中创建搜索功能并刷新该列表

时间:2012-10-21 14:27:10

标签: android listview filter

我正在尝试使用搜索功能制作ListView

但我遇到的问题是,虽然我在使用过滤器(CharSequence)后得到过滤后的列表,但列表中对象的位置仍然是过滤器之前的位置。因此,当我在搜索后点击该项目时,它会响应较早的项目,即列表没有得到刷新。

我正在使用这段代码:

inputSearch.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
    int after) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
    int count) {
        // TODO Auto-generated method stub
        ((SimpleAdapter) PlayListActivity.this.adapter).getFilter().filter(s);
    }

});

我应该怎样做才能让它按照我想要的方式工作,即当我输入输入文本时...它会搜索并刷新列表,这样当我尝试点击某个项目时,它只响应该项目而不是前一个项目

1 个答案:

答案 0 :(得分:0)

考虑filter()方法是异步的。

尝试使用SimpleAdapter.filter(CharSequence约束,Filter.FilterListener侦听器)方法而不是使用您自己的FilterListerner对象的过滤器(CharSequence约束),并在过滤器完成时调用适配器notifyDataSetChanged()以通知列表刷新。


已编辑(已添加示例代码):

((SimpleAdapter) PlayListActivity.this.adapter).getFilter().filter(s, new Filter.FilterListener() {
        @Override
        public void onFilterComplete(int count) {
               PlayListActivity.this.runOnUiThread(new Runnable() {
                     @Override
                     public void run() {
                         PlayListActivity.this.adapter.notifyDataSetChanged();
                     }
                });
        }
 });