如何在不通知DataSetChanged的情况下筛选listView



在开发我的第一个应用程序时,我想让用户能够在ListView中搜索条目(它在UI线程中)。为此,我在操作栏中添加了SearchView。

listView1.setTextFilterEnabled(true);

在异步任务中,我将适配器设置为列表View:

protected void onPostExecute(boolean result) {
ListAdapter listadapter= new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, nameList);
listview1.setAdapter(listadapter);
}

现在的SearchView:

public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);    
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setOnQueryTextListener(this);
return true;
[...]
}

我还添加了以下功能:

public boolean onQueryTextChange(String newText) {
ListView listview1= (ListView) findViewById(R.id.mylist);
listview1.setFilterText(newText);
//mFilter.filter(newText);
return false;
}
public boolean onQueryTextSubmit(String query) {
ListView listview1= (ListView) findViewById(R.id.mylist);
listview1.setFilterText(query);
}

现在过滤运行良好,但这个带有搜索字符序列的覆盖层隐藏了过滤后的数据->看起来不太好。

当我到处阅读时,没有简单的可能性可以关闭这个覆盖。所以我稍微更改了一下代码:

onPostExecute(blaaaaa) { [...]
//Filter mFilter= = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, nameList).getFilter();

以及两个功能:

//mFilter.filter(the_entered_text);
((ArrayAdapter<String>)listAdapter).getFilter().filter(query);
((ArrayAdapter<String>)listAdapter).notifyDataSetChanged();

我现在的问题是,如何更新listView"listview1.notifyDataSetChanged()"对我来说不是选项,因为它不适用于我的ListAdapter。

EDIT:转换适配器,就像在应答postet中一样,现在它可以工作,但它会过滤:显示所有以"ka"开头的条目,而不是包含"ka"的条目。

listview1.getAdapter().notifyDataSetChanged()

简化

最新更新