代码之家  ›  专栏  ›  技术社区  ›  EdmDroid

将OnQueryTextListener附加到SearchView会产生NullPointerException

  •  1
  • EdmDroid  · 技术社区  · 11 年前

    我的活动中有一个搜索视图。当我试图附加OnQueryTextListener时,它会给我一个NullPointerException。其Java代码如下

        @Override
    public  boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.allpurpose, menu);
        MenuItem        searchItem  = menu.findItem(R.id.apmenu_search);
        SearchView      searchView  = (SearchView) MenuItemCompat.getActionView(searchItem);
        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
            public boolean onQueryTextChange(String newText) {return true;}
            public boolean onQueryTextSubmit(String query) {return true;}
        };
       searchView.setOnQueryTextListener(queryTextListener);
       return   super.onCreateOptionsMenu(menu);
    }
    

    XML代码:

     <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/apmenu_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="@string/srch"
        android:showAsAction="ifRoom"
        android:actionViewClass="android.support.v7.widget.SearchView" />
    </menu>
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   EdmDroid    10 年前

    所有“Compat”项都用于提供向后兼容性。所以在这种情况下 MenuItemCompat 支持7以上版本的操作栏项(而不是普通的11)。在java代码中,如果 菜单项比较 ,那么在xml中也必须有一个“Compat”项。现在,“app”命名空间支持这些“Compat”项。所以像这样更改xml:

    <?xml version="1.0" encoding="utf-8"?>
    <menu 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto" >
            <item
                android:id="@+id/apmenu_search"
                android:icon="@android:drawable/ic_menu_search"
                android:title="@string/srch"
                app:showAsAction="ifRoom"
                app:actionViewClass="android.support.v7.widget.SearchView" />
    </menu>