Java 如何在片段中使用getFilter()筛选ListAdapter

Java 如何在片段中使用getFilter()筛选ListAdapter,java,android,android-layout,listview,android-fragments,Java,Android,Android Layout,Listview,Android Fragments,我想用搜索操作栏过滤ListAdapter,这是一个SimpleAdapter。我正在努力理解如何在onquerytexsubmit和onQueryTextChange方法中使用getFilter。我用的是碎片 我的onquerytexsubmit和onQueryTextChange方法工作正常 这是我的OnCreateOptions菜单: @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

我想用搜索操作栏过滤ListAdapter,这是一个SimpleAdapter。我正在努力理解如何在onquerytexsubmit和onQueryTextChange方法中使用getFilter。我用的是碎片

我的onquerytexsubmit和onQueryTextChange方法工作正常

这是我的OnCreateOptions菜单:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu,inflater);

    SearchManager searchManager = (SearchManager)   this.getContext().getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView)   menu.findItem(R.id.action_search).getActionView();

      searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
     searchView.setIconifiedByDefault(false);   

     SearchView.OnQueryTextListener textChangeListener = new  SearchView.OnQueryTextListener() 
    {
        @Override
        public boolean onQueryTextChange(String newText) 
        {
            // this is your adapter that will be filtered
         //   adapter.getFilter().filter(newText);
            //  adapter.getFilter().filter(newText);
            System.out.println("on text chnge text: "+newText);
            return true;
        }
        @Override
        public boolean onQueryTextSubmit(String query) 
        {
            // this is your adapter that will be filtered
         //  adapter.getFilter().filter(query);
        //  adapter.getFilter().filter(query);
            System.out.println("on query submit: "+query);
            return true;
        }
    };
    searchView.setOnQueryTextListener(textChangeListener);

  //   return super.onCreateOptionsMenu(menu);

}
ListAdapter adapter = new SimpleAdapter(getActivity(), inboxList, R.layout.p_list_item,
                        new String[] { TAG_ID, TAG_FROM, TAG_COUNTRY, TAG_DATE, TAG_EMAIL, TAG_SUBJECT },
                        new int[] { R.id.from, R.id.subject, R.id.country, R.id.date, R.id.mail, R.id.roundscore }) {
这是我的ListAdapter:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu,inflater);

    SearchManager searchManager = (SearchManager)   this.getContext().getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView)   menu.findItem(R.id.action_search).getActionView();

      searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
     searchView.setIconifiedByDefault(false);   

     SearchView.OnQueryTextListener textChangeListener = new  SearchView.OnQueryTextListener() 
    {
        @Override
        public boolean onQueryTextChange(String newText) 
        {
            // this is your adapter that will be filtered
         //   adapter.getFilter().filter(newText);
            //  adapter.getFilter().filter(newText);
            System.out.println("on text chnge text: "+newText);
            return true;
        }
        @Override
        public boolean onQueryTextSubmit(String query) 
        {
            // this is your adapter that will be filtered
         //  adapter.getFilter().filter(query);
        //  adapter.getFilter().filter(query);
            System.out.println("on query submit: "+query);
            return true;
        }
    };
    searchView.setOnQueryTextListener(textChangeListener);

  //   return super.onCreateOptionsMenu(menu);

}
ListAdapter adapter = new SimpleAdapter(getActivity(), inboxList, R.layout.p_list_item,
                        new String[] { TAG_ID, TAG_FROM, TAG_COUNTRY, TAG_DATE, TAG_EMAIL, TAG_SUBJECT },
                        new int[] { R.id.from, R.id.subject, R.id.country, R.id.date, R.id.mail, R.id.roundscore }) {

将适配器作为定义为的全局变量

ListAdapter listAdapter;
在应用程序中实现searchView之前,请确保适配器显示了适当的结果,如果是,请实现搜索

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.search_menu,menu);

    MenuItem item = menu.findItem(R.id.search_menu);
    SearchView searchView = (SearchView) item.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            listAdapter.getFilter().filter(newText);
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

adapter.getFilter().filter(newText)
没问题我不能那样使用它这就是
android.widget.filter
的工作原理,你不能使用什么?它说我需要向适配器添加cast,所以我这样做了,它就变成了((simpledapter)adapter().filter(query);。然后我得到一个错误:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.widget.Filter android.widget.SimpleAdapter.getFilter()”。如果
适配器
变量只是
null
,请确保它已正确初始化