2013-01-01 43 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被称为?)。有什么办法可以防止这种情况发生?每当用户点击某个建议时,我都不希望我的活动“重新创建”。

如需更多代码,请询问。谢谢。

编辑:代码添加

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

相关问题