0

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

但是我面临的问题是,虽然我在使用 filter( 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);
    }

});

我应该怎么做才能使它按我想要的方式工作,即,当我输入输入文本时......它搜索并刷新列表,所以当我尝试单击一个项目时,它只响应该项目而不是前一个项目。

4

1 回答 1

0

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

尝试使用 SimpleAdapter.filter(CharSequence constraint, Filter.FilterListener listener) 方法,而不是使用您自己的 FilterListerner 对象的 filter(CharSequence constraint) 方法,并在过滤器完成时调用适配器 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();
                     }
                });
        }
 });
于 2012-10-21T22:48:07.447 回答