0

最初のアプリで作業しているときに、ユーザーがListView(UIスレッドにある)のエントリを検索できるようにしたいと思います。そのために、SearchViewをアクションバーに追加しました。

listView1.setTextFilterEnabled(true);

AsyncTaskで、アダプタを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シーケンスを含むこのオーバーレイは、フィルタリングされたデータを非表示にしています->見栄えがよくありません。

私がどこでも読んでいるように、このオーバーレイをオフにする簡単な可能性はありません。そこで、コードを少し変更しました。

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

および2つの機能:

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

私の質問は、listViewを更新するにはどうすればよいですか? その「listview1.notifyDataSetChanged()」は、私のListAdapterで使用できないため、私にはオプションではありません。

編集:回答postetのようにアダプタをキャストすると、機能するようになりますが、次のようにフィルタリングされます。入力されたtext = "ka"-> "ka"を含むエントリではなく、"ka"で始まるすべてのエントリが表示されます。

4

1 に答える 1

0

listview1.getAdapter().notifyDataSetChanged()

シンプル

于 2012-11-12T20:46:05.857 に答える