Обнуление после миграции Android X androidx.appcompat.widget.SearchView - PullRequest
2 голосов
/ 16 октября 2019

Я добавил Android X в xml

 public boolean onCreateOptionsMenu(final Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.notebook_menu, menu);
    MenuItem searchMenuItem = menu.findItem(R.id.notebook_search);      
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);    
    }

Из меню

  <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
        android:id="@+id/notebook_search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        android:icon="@drawable/tab_notebook_search"
        app:showAsAction="always|collapseActionView"
        android:title="@string/search"/>
        </menu>

Ошибка

java.lang.NullPointerException: Попытка вызвать виртуальныйметод 'void android.widget.SearchView.setSearchableInfo (android.app.SearchableInfo)' для ссылки на пустой объект

1 Ответ

1 голос
/ 16 октября 2019

Используйте app:actionViewClass вместо android:actionViewClass в макете вашего меню. Это проблема. Измените, как показано ниже:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/notebook_search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        android:icon="@drawable/tab_notebook_search"
        app:showAsAction="always|collapseActionView"
        android:title="@string/search"/>
</menu>

Кроме этого, вероятно, ваш рефакторинг сделан неправильно. Попробуйте Refactor> Migrate to AndroidX и нажмите DoRefactor

...