2013-01-01 7 views
6

私のアプリケーションでは、自分のメインアクティビティを自分のマニフェストのデフォルトの検索アクティビティとして定義して、コンテンツプロバイダを検索可能にしました。onSuggestionClickは自分のアクティビティを再作成します

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

次に、ユーザーがクリックした提案に基づいてマップを更新するonSuggestionClickオプションを実装しました。 searchviewはアクションバーにあります。 問題は、ユーザーが提案をクリックしたときに何らかの形でアクティビティが再作成されることです(OnPauseとOnResumeが呼び出されたと思います)。これが起こらないようにする方法はありますか?ユーザーが提案をクリックするたびに、自分のアクティビティが「再作成」されることは望ましくありません。

さらにコードが必要な場合は、お尋ねください。ありがとう。

EDIT:コードは、私のメインの活動に

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

を追加しました:

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

あなたのアクティビティコード(または検索をしなければならない、少なくとも、すべての関連部分)だけでなく、あなたの検索可能を追加してください.xml。 –

+0

いくつかのコードを追加しました。 – Gravecard

答えて

2

は私の質問を解決しました。

android:launchMode="singleTop" 

:から

:マニフェストに変更

android:launchMode="singleTask" 
+5

また、onSuggestionClick()からtrueを返すこともできます。つまり、Androidはメソッドがclickイベントを処理したと想定し、それについて何もしません(たとえば、アクティビティを再度開始するなど)。 (そして、 "公式に推奨されている")、あなたの方法も同様に機能します。 – ToVine

関連する問題