2015-01-06 24 views
8

こんにちは私はGmailと同じようにSearchViewを実装しようとしています。SearchView is 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); 
} 

searchViewオブジェクトがヌルである

マニフェスト:

<?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" /> 

メニューレイアウト:

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

誰でもこのオブジェクトがnullになる理由を理解するのに役立つことができますか? ありがとうございました!!!!

+7

これは 'app:actionViewClass'であってはなりませんか?あなたは 'ActionBarActivity'を拡張していますか? – Blackbelt

+0

YEAHH great catch Blackbelt !!!その固定:D –

+0

あなたは歓迎です – Blackbelt

答えて

29

を試してみてください。

<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_search" 
    android:icon="@drawable/ic_action_search" 
    app:showAsAction="collapseActionView|always" 
    android:title="@string/action_search" 
    app:actionViewClass="android.support.v7.widget.SearchView"/> 

ですから、app代わりのandroidを使用する必要がありますメニュー項目のタグに:メニューXMLにactionViewClass = "android.support.v7.widget.SearchView" ----:

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

ありがとう!それが問題でした。 –

+0

乾杯、幸せに助けてください:) – shyam

+1

動作しません。不完全な答え。Javaコードはありません。 – StarWind0

-1

は、メニューのレイアウトで

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

私は使用しました: MenuItem searchItem = menu.findItem(R.id.action_search); \t searchView =(SearchView)MenuItemCompat.getActionView(searchItem); 同じエラー: 01-06 16:51:27.063:E/AndroidRuntime(27106):致命的な例外:メイン 01-06 16:51:27.063:E/AndroidRuntime(27106):プロセス:com.dgp、 PID:27106 01-06 16:51:27.063:E/AndroidRuntime(27106):java.lang.NullPointerException:仮想メソッドを呼び出そうとしました 'void android.support.v7.widget.SearchView.setSearchableInfo(android.app.SearchableInfo ) 'nullのオブジェクト参照で ありがとう –

+0

menuitemがヌルかどうかチェックしましたか?ブラックベルトのコメントも正しいです、それはappでなければなりません:actionViewClass not android:actionViewClass – Shooky

0

検索ビューをサポートするために、あなたは

アプリを使用する必要があります

ファイルとJavaファイル

android.support.v7.widget.SearchViewをインポートする必要があります車を見てください。完全にインポートされたクラスはandroid.support.v7.widget.SearchViewです。これらの2つの部分が同じでない場合、ヌルポインタ例外が発生する可能性があります。