2013-10-18 21 views
7

Enterキーを押したときに検索アクティビティが起動していません。アクションバーに検索ビューがきれいに表示されます。しかし、私は、検索クエリとプレスがEnterキーを押したときに検索アクティビティが起動しない

のAndroidManifest.xml

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

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 

    > 
    <activity 
     android:name="com.punit.rateit.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:theme="@style/Theme.AppCompat.Light" 
       android:name=".SearchPageActivity"> 
      <meta-data android:name="android.app.default_searchable" android:value=".SearchResultsActivity" /> 
     <intent-filter> 
     <action android:name="android.intent.action.SearchPage" /> 
     </intent-filter> 
    </activity> 

    <activity android:name="com.punit.rateit.SearchResultsActivity" android:launchMode="singleTop" > 
    <intent-filter> 
    <action android:name="android.intent.action.SEARCH" /> 
    <meta-data android:name="android.app.searchable" 
       android:resource="@xml/searchable"/> 
    </intent-filter> 
    </activity>  

    </application> 

</manifest> 

を入力する入力したときにここでMenu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:com.punit.rateit="http://schemas.android.com/apk/res-auto" > 
<!-- Search, should appear as action button --> 
<item android:id="@+id/search" 
     android:icon="@drawable/ic_search" 
     android:title="@string/action_search" 
     com.punit.rateit:actionViewClass="android.widget.SearchView" 
     com.punit.rateit:showAsAction="ifRoom" 

     /> 

    </menu> 

アクションバーを示した活動です。

 public boolean onCreateOptionsMenu(Menu menu) { 

    MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu,menu); 
    SearchManager searchManager = 
      (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

     SearchView searchView = 
       (SearchView) menu.findItem(R.id.search).getActionView(); 

     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 
     searchView.setSubmitButtonEnabled (true); 
    return super.onCreateOptionsMenu(menu); 
} 

検索ボタンを提出したときに活動が呼び出されるべきであるのSearchResultの活動が押され

public class SearchResultsActivity extends Activity { 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d("search", "search triggered"); 
    setContentView(R.layout.searchpage); 

    handleIntent(getIntent()); 
} 
@Override 
protected void onNewIntent(Intent intent) { 
    Log.d("search", "search triggered"); 
    setIntent(intent); 
    handleIntent(intent); 
} 
private void handleIntent(Intent intent) 
{ 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      Log.d("search", query); 
} 
    } 

@Override 
public boolean onSearchRequested() { 

    Log.d("search", "search triggered"); 

    return false; // don't go ahead and show the search box 
} 

答えて

4

は、問題を解決しました。タグ が必要でした。アクティビティから削除し、アプリケーションの下に置くことがそのトリックでした。ここで

はmanifest.xmlに

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    > 
    <meta-data android:name="android.app.default_searchable" android:value=".SearchResultsActivity"/> 
    <activity 
     android:name="com.punit.rateit.MainActivity" 
     android:label="@string/app_name" > 
     <meta-data android:name="android.app.default_searchable"   
      android:value="com.punit.rateit.SearchResultsActivity" /> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
+1

これは機能していないようです。同じ名前の値を持つ2つの競合するメタデータタグがあります。 – John61590

+2

これを確認してください:http://stackoverflow.com/questions/11699206/cannot-get-searchview-in-actionbar-to-work Uは主な活動(検索ウィジェットを配置する場所と検索アクティビティ) –

+3

ドキュメントは別の話をします。 アクティビティの検索ダイアログの検索可能なアクティビティを宣言するには、それぞれのアクティビティの要素内に要素を追加します。要素には、検索可能なアクティビティのクラス名を指定するandroid:value属性と、android.app.default_searchableという値を持つandroid:name属性を含める必要があります。 – Pankaj

1

における最新のアプリケーションタグである

...私は同じ問題を抱えていた、との答えのための私の検索は、ここに連れて行ってくれたので、ここで私のために働いていたものです

あなたsearchables.xmlファイルが正しい場所にあることを確認します(つまり、あなたのres/xml/フォルダ内 )と同じファイルがどの エラーが含まれていないこと - そう、あなたは見つけること (SearchManager)getSystemService(Context.SEARCH_SERVICE).getSearchableInfo(componentName) はnullを返し、検索機能を無効にします。

(また、Androidのガイドに示されている例を使用 が検索を行うと、同じ活性の検索を表示しているときのみのためのものであるので、あなたが適切な方法でcomponentName、 設定を確認してください。)

。 ..それは他の誰かを保存する可能性があります希望の共有は、4時間を無駄に! :/

+0

できるだけ複雑なものにするためにGoogleを信頼してくださいあなたは私の質問[ここ]を見ることができますか?(http://stackoverflow.com/questions/27567796/android-アシスト検索 - 検索 - ボタン - 非 - 呼び出し - 検索可能 - アクティビティ)?問題を見つけることができますか? – Solace

0

私はsearchable.xml内の文字列を使用していませんでした。

このように設定する必要があります。そうしないと、nullが返されます。私は@stringを使用する代わりに、テキストを入力しました。

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/app_label" 
    android:hint="@string/search_hint" > 
</searchable> 
関連する問題