我只是將我的活動的啓動模式設置爲singleTop,併爲此處理onNewIntent方法。
AndroidManifest.xml中
<activity android:name=".MyActivity" android:launchMode="singleTop" android:theme="@style/Theme.MyTheme" >
<intent-filter >
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
MyActivity.java (這顯然是過於簡單化了 - 你可能只是對你的現有片段的公共方法傳遞它的搜索查詢在下面的例子中我更換。它與一個全新的片段。)
@Override
protected void onNewIntent (Intent intent) {
MyFragment newFrag = new MyFragment();
newFrag.setArguments(args);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// remove previous show list fragment if it exists
Fragment prev = getSupportFragmentManager().findFragmentByTag("myFrag");
if (prev != null) {
ft.remove(prev);
}
ft.add(R.id.fragment_placeholder, newFrag, "myFrag");
ft.commit();
}
使用FLAG_ACTIVITY_CLEAR_TOP有效地去除這是在返回堆棧和較低活性的實例重新實例化它ontop的。當用在直接上一個Activity上時,你實際上在後臺調用了「Back」。 – Graeme