Android SearchView筛选器不工作
我正在尝试使用searchView筛选Listview,我使用SimpleCursorAdapter填充了Listview,但当我点击searchView栏并键入nothing filters时,我已经完成了以下操作 我的搜索活动Android SearchView筛选器不工作,android,cursor,android-contentprovider,searchview,Android,Cursor,Android Contentprovider,Searchview,我正在尝试使用searchView筛选Listview,我使用SimpleCursorAdapter填充了Listview,但当我点击searchView栏并键入nothing filters时,我已经完成了以下操作 我的搜索活动 package com.example.androidcontacts; import java.util.ArrayList; import android.app.ListActivity; import android.content.CursorLoader
package com.example.androidcontacts;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.CursorLoader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.CursorAdapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.SimpleCursorAdapter;
public class Search extends ListActivity {
ListView listView;
SearchView searchView;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
searchView=(SearchView)findViewById(R.id.searchView1);
listView=(ListView)findViewById(android.R.id.list);
Uri allContacts = Uri.parse("content://"+"com.example.androidcontacts.Books" + "/Contact");
Cursor c;
CursorLoader cursorLoader = new CursorLoader(
this,allContacts,null,null,null,null);
c = cursorLoader.loadInBackground();
// THE DESIRED COLUMNS TO BE BOUND*/
String[] columns = new String[] {Contact.TITLE};
int[] views = new int[] {R.id.code};
listView.setAdapter(adapter);
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listview_item_layout,
c, columns, views,CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
this.setListAdapter(adapter);
searchView.setOnQueryTextListener(new OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
}
}
当数据集中发生更改时,始终调用适配器的“notify”方法,因为它是游标或数组
adapter.getFilter().filter(newText);
adapter.notifyDatasetChanged();
您还可以仅为UI更新而不是数据更改调用notifyDatasetInvalidated()。但是对于你的问题,你应该试试第一个
希望这有帮助
adapter.getFilter().filter(newText);
adapter.notifyDatasetChanged();