11

アクティビティに検索バーを追加するために私はthis Android guideに従ってきました。searchManager.getSearchableInfo(getComponentName())がnullを返す

のres /メニュー/ activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/search" 
    android:title="@string/menu_search" 
    android:icon="@android:drawable/ic_menu_search" 
    android:showAsAction="collapseActionView|ifRoom" 
    android:actionViewClass="android.widget.SearchView" /> 
<item 
    android:id="@+id/menu_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/menu_settings" 
    android:icon="@drawable/ic_menu_settings"/> 

</menu> 

のres/XML/searchable.xml:マニフェストファイルの

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_name" 
    android:hint="@string/search_hint" /> 

活動項目:

<activity 
     android:name="de.ivu.realtime.app.activity.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value="de.ivu.realtime.app.activity.MainActivity" /> 
    </activity> 
セットアップは、次のようになります

およびコードはMainActivityにあります。

@SuppressLint("NewApi") 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    this.getMenuInflater().inflate(R.menu.activity_main, menu); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    { 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
     SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); 
     searchView.setSearchableInfo(searchableInfo); 
    } 

    return true; 

searchManager.getSearchableInfo(getComponentName());を呼び出すと、常にnullが返されます。私はstackoverflow上の他の質問でこれを見てきましたが、そこに提示されたソリューションのどれも私の場合に適用されるようです。

  • メニューXMLは<?xml version="1.0" encoding="utf-8"?>ヘッダに
  • 検索可能なXMLは一切ハードコードされていない文字列
  • トリックを行いません
  • 清掃と再建を動作しないメニュー項目の名前を変更しているいずれかの

ご協力いただきありがとうございます。ありがとう!

+0

[アクションバーの検索ビューを動作させることができません](http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work) – Krizai

答えて

9

あなたは問題がActionBarSherlockとの統合時に私のミスだった私の場合は

<meta-data 
    android:name="android.app.default_searchable" 
    android:value=".activity_that_handles_the_search" /> 

<intent-filter> 
    <action android:name="android.intent.action.SEARCH" /> 
</intent-filter> 
+0

ご返信ありがとうございます。 'SearchView'は' ActionBar'にあります(更新された質問を見てください)。 'MainActivity'には検索結果を提供するリソースがあるので、私はあなたのコードをマニフェストの' MainActivity'セクションに追加しました。それでも 'searchManager.getSearchableInfo(getComponentName());'は 'null'を返します。 – Chris

+0

答えを更新しました。インテントフィルターをもう一度適用してみてください。 –

+0

ありがとう、それは動作します!この他のガイドhttp://developer.android.com/guide/topics/search/search-dialog.htmlを使用して、私はこれも考え出しました:-)。 – Chris

2

あなたSearchViewを入れている活動に追加します。この場合android:actionViewClassandroid.widget.SearchViewの代わりにcom.actionbarsherlock.widget.SearchViewである必要があります。私はこれがばかげて聞こえることを知っていますが、私はあなたに似ている私のコードでがnullである理由を理解しようと20分を費やしました。

+0

私の問題は逆でした。私はActionBarSherlockを統合しましたが、これはアプリのアップデートで削除されました。 com.actionbarsherlock.widget.SearchViewを削除してandroid.widgetに置き換える必要がありました。SearchView –

1

は交換してください:

android:actionViewClass="android.widget.SearchView" 

で:あなたはサポートライブラリを使用している場合

app:actionViewClass="android.widget.SearchView" 

appのでが頻繁に使用されています。

+0

スーパー!...ありがとう – Khalil