2013-01-01 19 views
6

Nella mia domanda ho fatto il mio fornitore di contenuto ricercabile, che definisce la mia attività principale l'attività di ricerca predefinito sul mio manifesto.onSuggestionClick ricrea la mia attività

<activity 
      android:name="com.pt.application.MainActivity" 
      android:label="@string/title_activity_map" 
      android:launchMode="singleTop" 
      android:theme="@style/AppTheme" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 

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

Poi ho implementato la possibilità onSuggestionClick per aggiornare una mappa, basata su suggerimento cliccato dall'utente. La searchview è sulla barra delle azioni. Il problema è che quando l'utente fa clic su un suggerimento, in qualche modo l'attività viene ricreata (penso che OnPause e OnResume siano chiamati?). C'è un modo per evitare che ciò accada? Non voglio che la mia attività venga "ricreata" ogni volta che l'utente fa clic su un suggerimento.

Se è necessario più codice, si prega di chiedere. Grazie.

EDIT: Codice aggiunto

<?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" 
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" 
    android:voiceLanguageModel="web_search" 
    android:searchSuggestAuthority="com.pt.provider" 
    android:searchSuggestIntentData="content://com.pt.provider/busstop"> 
</searchable> 

Sulla mia attività principale:

 // Bind the Activity’s SearchableInfo to the Search View 
      searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView(); 
      this.setupSearchView(); 

    private void setupSearchView() 
     { 
      // Use the Search Manager to find the SearchableInfo related 
      // to this Activity. 
      SearchManager searchManager = 
        (SearchManager)getSystemService(Context.SEARCH_SERVICE); 
      SearchableInfo searchableInfo = 
        searchManager.getSearchableInfo(getComponentName()); 
      searchView.setSearchableInfo(searchableInfo); 
      searchView.setSubmitButtonEnabled(false); 

      searchView.setOnSuggestionListener(new OnSuggestionListener() { 

       @Override 
       public boolean onSuggestionSelect(int position) { 

        return false; 
       } 

       @Override 
       public boolean onSuggestionClick(int position) { 

        // Do things 

        return false; 
       } 
      }); 
     } 
+0

Si prega di aggiungere il codice attività (o almeno tutte le parti interessate che hanno a che fare con la ricerca), così come la vostra ricercabile .xml. –

+0

Aggiunto un po 'di codice. – Gravecard

risposta

2

Ha risolto il problema. Cambiato sul manifesto:

Da:

android:launchMode="singleTop" 

A:

android:launchMode="singleTask" 
+5

Puoi anche restituire true da onSuggestionClick(), in questo modo Android assumerà che il tuo metodo gestisca l'evento click e non farà altro (es. Ricomincia l'attività) - probabilmente è un modo "più pulito" per farlo (e quello "ufficialmente raccomandato"), anche se il tuo metodo funziona altrettanto bene. – ToVine

Problemi correlati