2014-10-24 8 views
9

Sto aggiornando la mia app utilizzando tutti i temi di AppCompat. Ho un nullpointer qui:NullPointerException su SearchView utilizzando AppCompat in Android 5.0

@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 
} 

Qui sono le mie importazioni principali:

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

Ho ragione nel pensare questa linea deve cambiare durante l'aggiornamento a AppCompat?

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

UPDATE:

ho cambiato in questo

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

Con lo stesso risultato nullo ...

AGGIORNAMENTO - ADD 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) 
+2

Aggiungere codice XML del vostro menu. – Simas

risposta

19

Con libreria di supporto è necessario utilizzare un speicific classe di voce di menu: MenuItemCompat.

android.support.v4.view.MenuItemCompat 

Il nome del metodo (getActionView) rimane lo stesso.

Il menu XML dovrebbe essere simile a questo:

<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> 
+0

Sì, penso sia stato. Non l'ho modificato nell'XML. – KickingLettuce

+7

Avvicinarsi, ma non del tutto; Ho aggiunto il mio XML e logcat completo questa volta. Modifica: aspetta, ho dimenticato di mettere "app" sul 'actionViewClass' - che lo ha corretto ... corretto! – KickingLettuce

+1

Grazie @KickingLettuce questo commento ha reso la mia giornata! :): D –