如何在没有notifyDataSetChanged的情况下过滤listView?

时间:2012-11-12 20:34:39

标签: android android-listview

在处理我的第一个应用程序时,我想让用户能够搜索ListView中的条目(它位于UI-Thread中)。 为此,我将SearchView添加到Action Bar中。

listView1.setTextFilterEnabled(true);

在AsyncTask中,我将Adapter设置为listView:

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);
}

现在过滤 正常工作,但是这个与搜索过的char序列的叠加层隐藏了过滤后的数据 - &gt;看起来不太好。

当我到处阅读时,没有简单的方法可以关掉这个叠加层。 所以我改变了我的代码:

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。

编辑:施放适配器,如在答案后面,现在它可以工作,但它过滤所以:输入text =“ka” - &gt;显示所有以“ka”开头的条目,而不是包含“ka”的条目。

1 个答案:

答案 0 :(得分:0)

listview1.getAdapter().notifyDataSetChanged()

Simples