2013-01-01 19 views
6

W mojej aplikacji umożliwiłem wyszukiwanie dostawcy treści, definiując moją główną aktywność jako domyślną aktywność wyszukiwania w moim manifeście.onSuggestionClick odtwarza moją aktywność

<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> 

potem wdrożony onSuggestionClick opcja aktualizacji mapy, na podstawie sugestii kliknięciu przez użytkownika. Widok wyszukiwania znajduje się na pasku akcji. Problem polega na tym, że gdy użytkownik kliknie na sugestię, w jakiś sposób aktywność zostaje odtworzona (myślę, że wywoływane są OnPause i OnResume?). Czy istnieje sposób, aby temu zapobiec? Nie chcę, aby moja aktywność była "odtwarzana" za każdym razem, gdy użytkownik kliknie na sugestię.

Jeśli potrzebujesz więcej kodu, zapytaj. Dzięki.

EDIT: Kod dodany

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

Na moje główne działania:

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

proszę dodać swój kod działalności (lub przynajmniej wszystkie istotne elementy, które mają do czynienia z wyszukiwaniem), a także swoją przeszukiwania .xml. –

+0

Dodano kod. – Gravecard

Odpowiedz

2

rozwiązać moje pytanie. Zmieniono w manifeście:

Skąd:

android:launchMode="singleTop" 

do:

android:launchMode="singleTask" 
+5

Możesz również zwrócić wartość true z onSuggestionClick(), w ten sposób Android założy, że twoja metoda obsługiwała zdarzenie click i nie zrobi nic więcej na ten temat (np. Ponownie uruchom swoją aktywność) - to prawdopodobnie "czystszy" sposób na zrobienie tego (i "oficjalnie rekomendowany"), nawet jeśli twoja metoda działa również. – ToVine

Powiązane problemy