我正在尝试使用搜索功能制作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);
}
});
我应该怎样做才能让它按照我想要的方式工作,即当我输入输入文本时...它会搜索并刷新列表,这样当我尝试点击某个项目时,它只响应该项目而不是前一个项目
答案 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();
}
});
}
});