NullPointerException при SearchView с помощта на AppCompat в Android 5.0

Актуализирам приложението си, като използвам всички теми на AppCompat. Тук получавам нулев указател:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    MenuItem searchItem = menu.findItem(R.id.menu_search);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    setupNewSearchView(searchItem, searchManager);

    return true;
}

private void setupNewSearchView(final MenuItem searchItem,
                                SearchManager searchManager) {
    final SearchView searchView = (SearchView) searchItem.getActionView();

   // Null at line below
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

   // Everything else below edited out
}

Ето моите ключови вносни елементи:

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;

Прав ли съм, като смятам, че този ред трябва да се промени при актуализиране до AppCompat?

final SearchView searchView = (SearchView) searchItem.getActionView();

АКТУАЛИЗАЦИЯ:

Смених го на това

   final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

Със същия нулев резултат...

АКТУАЛИЗАЦИЯ - ДОБАВЯНЕ НА 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/menu_search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        android:title="search" />
    <item

</menu>

LogCat:

10-24 11:49:07.040: E/AndroidRuntime(4846): java.lang.NullPointerException
10-24 11:49:07.040: E/AndroidRuntime(4846):     at com.---.---.MainFragmentActivity.setupNewSearchView(MainFragmentActivity.java:1300)
10-24 11:49:07.040: E/AndroidRuntime(4846):     at com.---.---.MainFragmentActivity.onCreateOptionsMenu(MainFragmentActivity.java:1292)
10-24 11:49:07.040: E/AndroidRuntime(4846):     at android.app.Activity.onCreatePanelMenu(Activity.java:2538)
10-24 11:49:07.040: E/AndroidRuntime(4846):     at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275)
10-24 11:49:07.040: E/AndroidRuntime(4846):     at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276)
10-24 11:49:07.040: E/AndroidRuntime(4846):     at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79)
10-24 11:49:07.040: E/AndroidRuntime(4846):     at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1056)
10-24 11:49:07.040: E/AndroidRuntime(4846):     at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259)

person TheLettuceMaster    schedule 24.10.2014    source източник
comment
Добавете xml кода на вашето меню.   -  person Simas    schedule 24.10.2014


Отговори (1)


С библиотеката за поддръжка трябва да използвате конкретен клас на елемент от менюто: MenuItemCompat.

android.support.v4.view.MenuItemCompat

Името на метода (getActionView) остава същото.

Вашето xml меню трябва да изглежда така:

<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>
</menu>
person Simas    schedule 24.10.2014
comment
Да, мисля, че това беше. Не съм го променил в XML. - person TheLettuceMaster; 24.10.2014
comment
Приближава се, но не съвсем; Този път добавих моя XML и пълен logcat. Редактиране: Чакай, забравих да сложа приложение на actionViewClass -- това го оправи ... маркирането е правилно! - person TheLettuceMaster; 24.10.2014
comment
Благодаря @KickingLettuce този коментар направи деня ми! :) :Д - person Basim Sherif; 18.02.2015