Android onSearchRequested()回调调用活动

Nic*_*end 2 search stack android

我有一个MapActivity,当按下搜索按钮时,它会显示Android搜索框.SearchManager管理对话框,并将用户的查询传递给可搜索的活动,该活动搜索SQLite数据库并使用自定义适配器显示结果.

这很好 - 我从显示的数据库中得到了正确的结果.

但是,我想要做的是在用户点击搜索结果时在地图上的MapActivity中显示结果.目前,这意味着启动一个新的MapActivity,使用Bundle传递搜索结果.

我认为更清洁的方法是将搜索结果传递回原始活动,而不是开始新的活动.目前,我的活动堆栈是MapAct - > SearchManager - >搜索结果 - >新MapAct.这意味着从新MapAct中按"后退"将返回查询结果,然后返回到原始MapAct.

似乎在搜索结果中,调用finish()不会导致在调用MapActivity中调用onActivityResult.

任何想法如何获得此回调并维护合理的活动堆栈?

dpd*_*ing 5

我一直在寻找这个问题的答案,最后发现了一些有用的东西.我必须使原始的调用活动成为可搜索的活动,所以我在清单中的条目如下所示:

<activity android:name=".BaseActivity"
          android:launchMode="singleTop">
   <!-- BaseActivity is also the searchable activity -->
   <intent-filter>
      <action android:name="android.intent.action.SEARCH" />
   </intent-filter>
   <meta-data android:name="android.app.searchable"
              android:resource="@xml/searchable"/>
   <!-- enable the base activity to send searches to itself -->
   <meta-data android:name="android.app.default_searchable"
              android:value=".BaseActivity" />
</activity>
Run Code Online (Sandbox Code Playgroud)

随后的搜索,而不是在这个活动中,手动和startActivityForResult与真正的搜索活动,那么这将让你setResultfinish回原来的呼叫活动.

我在这里博客文章中详细介绍了一下.