2014-06-05 3 views
2

J'essaie de faire une barre de recherche et j'ai suivi le tutoriel sur http://developer.android.com/training/search/setup.html. Cela ne fonctionne pas et SearchResultsActivity n'est pas appelé, donc j'ai immédiatement trouvé la question suivante: Search widget on action bar doesn't trigger my search activity. Cependant, les solutions répertoriées ici (plus précisément, l'ajout de métadonnées à l'intérieur de AndroidManifest.xml et l'utilisation de références à des chaînes dans xml/searchable.xml) ne résolvent pas mon problème. J'ai également essayé de mettre des méta-données dans <activity> dans AndroidManifest.xml et de nombreuses autres solutions en vain.Recherche sur la barre d'action n'appelle pas l'activité de recherche

Qu'est-ce que je fais mal?

Voici mon code:

main.xml:

<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.jsondataparser.app.MainActivity" > 
    <item android:id="@+id/action_settings" 
     android:title="@string/action_settings" 
     android:orderInCategory="100" 
     app:showAsAction="never" /> 
    <item android:id="@+id/search_menu" 
     android:title="@string/app_name" 
     android:icon="@drawable/ic_launcher" 
     android:showAsAction="collapseActionView|ifRoom" 
     android:actionViewClass="android.widget.SearchView" /> 
</menu> 

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/app_name"> 
</searchable> 

AndroidManifest.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.jsondataparser.app.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="com.jsondataparser.app.SearchResultsActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
</application> 

MainActivity. java:

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 

    // Associate searchable configuration with the SearchView 
    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.search_menu).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    return true; 
} 

SearchResultsActivity.java:

public class SearchResultsActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d("SearchResultsActivity", "onCreate called"); 
     handleIntent(getIntent()); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     handleIntent(intent); 
     Log.d("SearchResultsActivity", "onNewIntent called"); 
    } 

    private void handleIntent(Intent intent) { 

     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 

      Log.d("SearchResultsActivity", query); 
     } 
    } 
} 

Répondre

3

Put aussi

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

intérieur <activity> dans votre AndroidManifest.

+0

Merci, mais j'ai déjà essayé. – VolenD

+0

Votre SearchResultsActivity dans AndroidManifest.xml devrait ressembler à ceci: ' \t \t \t ' Désolé pour une mauvaise mise en forme. –

+3

Merci, cela a finalement aidé. Donc, dans '' devrait être utilisé '' et dans '' devrait être utilisé ' '. – VolenD

Questions connexes