2015-01-06 19 views
8

Ciao Sto cercando di implementare un SearchView proprio come in Gmail.SearchView è null android

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    if (!mNavigationDrawerFragment.isDrawerOpen()) { 
     getMenuInflater().inflate(R.menu.main, menu); 

     searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 


     restoreActionBar(); 
     return true; 
    } 

    return super.onCreateOptionsMenu(menu); 
} 

oggetto SearchView è nullo

manifesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.dgp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="18" 
     android:targetSdkVersion="21" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/logo" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".GameSearchActivity" /> 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".GameInfoActivity" 
      android:label="@string/title_activity_game_info" > 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value=".MainActivity" /> 
     </activity> 
     <activity 
      android:name=".SettingsActivity" 
      android:label="@string/title_activity_settings" > 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value=".MainActivity" /> 
     </activity> 
     <activity 
      android:name=".GameSearchActivity" 
      android:label="@string/title_activity_game_search" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.app.searchable" 
       android:value="@xml/searchable" /> 
     </activity> 
    </application> 

</manifest> 

Searchable.xml

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="@string/search_hint" /> 

layout del menu:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context="com.example.dgp.MainActivity" > 

<item 
    android:id="@+id/action_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="collapseActionView|always" 
    android:title="@string/action_search" 
    android:actionViewClass="android.support.v7.widget.SearchView"/> 

<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    app:showAsAction="never"/></menu> 

Qualcuno può aiutare a capire perché questo oggetto sta diventando nullo? Grazie !!!!

+7

non dovrebbe essere "app: actionViewClass'? Stai estendendo 'ActionBarActivity'? – Blackbelt

+0

YEAHH ottimo cinturone Blackbelt !!! quello riparato: D –

+0

prego – Blackbelt

risposta

29

In Layout Menu:

<item 
    android:id="@+id/action_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="collapseActionView|always" 
    android:title="@string/action_search" 
    android:actionViewClass="android.support.v7.widget.SearchView"/> 

uso questo:

<item 
    android:id="@+id/action_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="collapseActionView|always" 
    android:title="@string/action_search" 
    app:actionViewClass="android.support.v7.widget.SearchView"/> 

quindi è necessario utilizzare app invece di android nel tag voce di menu:

app:actionViewClass="android.support.v7.widget.SearchView" 
+0

grazie! quello era il problema –

+0

Saluti, felici di aiutare :) – shyam

+1

Non funziona. Risposta incompletaNessun codice java. – StarWind0

-1

provare

MenuItem searchItem = menu.findItem(R.id.action_search); 
searchView = MenuItemCompat.getActionView(searchItem); 
+0

Io ho usato: MenuItem searchItem = menu.findItem (R.id.action_search); \t searchView = (SearchView) MenuItemCompat.getActionView (searchItem); Ma stesso errore: 01-06 16: 51: 27,063: E/AndroidRuntime (27106): FATAL EXCEPTION: principale 01-06 16: 51: 27,063: E/AndroidRuntime (27106): Processo: com.dgp, PID: 27106 01-06 16: 51: 27,063: E/AndroidRuntime (27106): java.lang.NullPointerException: tentativo di richiamare il metodo virtuale 'void android.support.v7.widget.SearchView.setSearchableInfo (android.app.SearchableInfo) 'su un oggetto nullo di riferimento Grazie –

+0

hai controllato se il menu è nullo? Anche il commento di Blackbelts è corretto, dovrebbe essere app: actionViewClass non android: actionViewClass – Shooky

0

Sostenere vista Cerca è necessario utilizzare

app: actionViewClass = "android.support.v7.widget.SearchView" ---- nel xml menù presentare

e dovrà importare

android.support.v7.widget.SearchView nel file java

si prega di guardare auto la classe importata con esattezza è android.support.v7.widget.SearchView. quando queste due parti non sono uguali può verificarsi un'eccezione del puntatore nullo.

Problemi correlati