2011-08-04 85 views
3

我有一個應用程序,它顯示ListView中的一類項目目錄。這份名單是很長,所以我已經實現了Search能力是這樣的:如何在搜索開始新行爲時結束舊活動活動

<activity android:name=".ItemsOverview" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <!-- enable the search dialog to send searches to ItemsSearch --> 
     <meta-data android:name="android.app.default_searchable" 
        android:value=".ItemsSearch" /> 
    </activity> 
... 
... 
    <activity android:name=".ItemsSearch"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" 
        android:resource="@xml/searchable" /> 
    </activity> 

ItemsSearch則呈現相同ListView,但只包含符合搜索條件的項目。

有兩個基本的問題是:

  1. ItemsSearch是幾乎重複的ItemsOverview(但有一些改進的搜索功能);
  2. ItemsSearch疊加層ItemsOverview這樣,如果完成了三次或四次搜索,則需要四或五次按下「後退」按鈕才能脫身。不太理想的效果。 :)

我想,以某種方式,結束原來的活動時,第二活動開始,理想的是兩班(概述和搜索)合二爲一。有沒有辦法讓我的Activity檢測到它已經在另一個進程中運行,並且在初始階段就終止了其他進程?

一旦我明白這一點,我大概可以弄清楚如何將兩者結合起來。當他們需要使用過濾列表時,他人做了什麼?

回答

3

如果我明白了,您希望清除Activity Back Stack。致電您的搜索活動時使用活動標誌。

Intent intent = new Intent(this, Search.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

This is the developer page about the activity back stack.

+0

非常好的答案。我會試試這個。謝謝。 – Dennis

1

要結束舊的活動時,搜索開始新的活動給在odler活動結束(),並調用新的活動。 Intent intent = new (Intent(MainActivity.this,GPSActivity.class); startActivityForResult(intent, ACTIVITY_GPS);
finish();

在這我們可以開始新的活動GPSActivity並完成MainActivity。

+0

謝謝你的迴應。但是,如果用戶錯誤地按搜索,那麼我我的應用程序...後退按鈕不會撤消所有這一切。用戶不應該因爲一個錯誤而遭受損失,對吧? – Dennis

相關問題