Java Android中的SearchView

Java Android中的SearchView,java,android,android-fragments,searchview,Java,Android,Android Fragments,Searchview,我在片段中有一个工具栏,我想为这个工具栏添加searchView 我有这个: public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.clear(); getActivity().getMenuInflater().inflate(R.menu.menu_principal, menu);

我在片段中有一个工具栏,我想为这个工具栏添加searchView

我有这个:

 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
    getActivity().getMenuInflater().inflate(R.menu.menu_principal, menu);
    MenuItem item = menu.findItem(R.id.buscar);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            try {
                ArrayList<Producto> listaFiltrada = filter(list,newText);
                adapterProductos.setFilter(listaFiltrada);
            }catch (Exception r) {
                r.printStackTrace();
            }
            return true;
        }
    });

    MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            adapterProductos.setFilter(list);
            return true;
        }
    });
}
public void oncreateoptions菜单(菜单菜单,菜单充气机){
super.onCreateOptions菜单(菜单,充气机);
menu.clear();
getActivity().getMenuInflater().充气(R.menu.menu\u主体,菜单);
MenuItem=menu.findItem(R.id.buscar);
SearchView SearchView=(SearchView)MenuItemCompat.getActionView(项目);
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回true;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
试一试{
ArrayList listaFiltrada=过滤器(列表,新文本);
adapterProductos.setFilter(listaFiltrada);
}捕获(异常r){
r、 printStackTrace();
}
返回true;
}
});
MenuItemCompat.setOnActionExpandListener(项,新MenuItemCompat.OnActionExpandListener(){
@凌驾
公共布尔值onMenuItemActionExpand(MenuItem项){
返回true;
}
@凌驾
公共布尔值onMenuItemActionCollapse(MenuItem项){
adapterProductos.setFilter(列表);
返回true;
}
});
}
和此项菜单:

<item android:title="Buscar"
    android:id="@+id/buscar"
    android:icon="@drawable/ic_search_white_24dp"
    app:actionViewClass= "android:support.v7.widget.SearchView"
    app:showAsAction="ifRoom|collapseActionView"
    />

但我有一个空指针

致命异常:主 流程:jaimeperezpedraza.org.tienda,PID:15971 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.SearchView.setOnQueryTextListener(android.widget.SearchView$OnQueryTextListener)”

我想我没有很好地捕捉到searchView


帮忙

您的
NullPointerException
是由于
searchView
为空。这是因为您的XML有<代码> APP:ActhVIEW类=“Android:Save:V7.WiGeult.SexVIEW” -请注意“类代码>:<代码>中间的类名。

它应该改为
android.support.v7.widget.SearchView

<item android:title="Buscar"
  android:id="@+id/buscar"
  android:icon="@drawable/ic_search_white_24dp"
  app:actionViewClass= "android.support.v7.widget.SearchView"
  app:showAsAction="ifRoom|collapseActionView"
  />


查看getActionView(MenuItem项目)
已被弃用:哦……谢谢我去搜索其他项目mettod@VeneetReddy-它仅在版本26.0.0中被弃用,该版本仍为alpha。如果您使用的是早期版本的支持库,则仍然需要使用
MenuItemCompat.getActionView