2013-10-10 5 views
0

J'utilise le widget SearchView dans ActionBarSherlock comme suit:SearchView dans ActionBarSherlock

File.java

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

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

    return true; 
} 

File.xml

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

    <item android:id="@+id/MenuSearch" android:title="@string/Bs" 
     android:icon="@drawable/ic_action_search" 
     android:showAsAction="always|withText" 
     android:actionViewClass="com.actionbarsherlock.widget.SearchView" > 
    </item> 

</menu> 

Dans ma demande J'arrive à montrer l'icône de recherche et sélectionnez il se déroule la boîte de recherche pour le widget, mais quand j'écris une recherche je Je ne sais pas comment interagir avec le widget SearchView pour lancer une nouvelle activité et montrer une série de résultats. Avec la commande searchView.setSubmitButtonEnabled(true); apparaît une icône similaire à 'jouer' et je suppose que c'est pour ça, mais je ne sais pas comment interagir avec elle.

Quelqu'un peut-il aider?

Répondre

0

La documentation android officielle here décrit comment démarrer une nouvelle activité pour gérer la requête de recherche et afficher les résultats.

Tout d'abord, vous devez créer (si vous ne l'avez déjà) la configuration des recherches dans res/xml/searchable.xml, comme ceci:

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

Définissez cette configuration pour votre activité, qui contient SearchView dans actionbar, comme celui-ci (dans le manifeste):

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

</activity> 

donc, fondamentalement, vous avez besoin de votre activité interrogeable (nouvelle activité qui commencera après la soumission requête de recherche) pour gérer l'action android.intent.action.SEARCH. Déclarer dans le manifeste comme ceci:

<activity android:name=".SearchResultsActivity" ... > 
    ... 
    <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
    </intent-filter> 
    ... 
</activity> 

Et votre activité interrogeable devrait ressembler à ceci:

public class SearchResultsActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     ... 
     handleIntent(getIntent()); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     ... 
     handleIntent(intent); 
    } 

    private void handleIntent(Intent intent) { 

     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      //use the query to search your data somehow 
     } 
    } 
    ... 
}