2013-04-22 28 views
1

假設我有3個活動:A,B和C活動流A-> B-> C->一個在android系統

  • 答:家庭活動
  • B:信息收集活動
  • C:信息顯示活動

我的期望的流動是這樣:

  • 觸發器B收集信息。
  • 當B結束時,C會得到信息並顯示。
  • A-> B-> C-> A。
  • 另外,在C結束,它應該回到A.(這是從來沒有因爲我將B中的問題:完成())

我第一次嘗試:(失敗,原因是我做的不想看到A後B,甚至幾毫秒)

  1. A觸發器B收集信息。 (startActivityAsResult)
  2. B將結果傳遞給A,B:finish()。 (onActivityResult)
  3. 然後A觸發器C顯示。 (startActivity)

我的第二次嘗試:(?成功,但我想在那裏儘管這樣一個更好的方法)

  1. 一個觸發B到收集信息。 (startActivity)
  2. B觸發C和B:finish()。 (startActivity)

問題:

有限定序列導航的流等我看到taskBuildernextIntent() API的任何替代方式(這是更簡單的/直接)?

+4

我認爲你的第二次嘗試比第一次更好。我覺得這是更好的方法。 – nilkash 2013-04-22 03:50:59

+0

我以爲會有一個現成的和更簡單的API來制定流程:) – Roylee 2013-04-22 03:51:40

+1

恕我直言,你的第二次嘗試似乎是要走的路。它更容易,更清潔,更簡單! – SudoRahul 2013-04-22 03:52:10

回答

2

在上的後退按鈕按活動清除C返回堆棧和導航到

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (keyCode == KeyEvent.KEYCODE_BACK) { 
    onBackPressed(); 

} 

return super.onKeyDown(keyCode, event); 
    } 

    public void onBackPressed() { 
Intent myIntent = new Intent(C.this,A.class); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// clear the backstack 
startActivity(myIntent); 
finish(); 
return; 
    } 

A到B到C

在你的活動後退堆棧,你會在頂部,後面的B有C和next A.

當您按下C中的返回按鈕時,活動C從堆棧彈出,銷燬並且先前的活動B獲得焦點。因此,如果您想從C導航到A,請清除後退堆棧,導航到A並完成當前活動。

+1

嗨@RaghuNandan我也可以調用Finish()方法在B時,當我從它觸發C。所以我不需要意圖。 – 2013-04-22 05:12:53

+0

是的,你可以做到這一點。但你說你需要一個替代品,所以我提供了一個。 – Raghunandan 2013-04-22 05:19:25

+0

@Raghunandan其實我在問是否有流程的替代方案,比如有一個taskBuilder來指定活動的順序:)而不是意圖。 – Roylee 2013-04-22 06:15:50

2

如果我正確理解你,你只是想讓用戶不可能使用後退按鈕來進入已經「用完」的活動,是的?嘗試使用類似修改活動代碼會在AndroidManifest.xml中如下:

<activity 
    android:name="yourpackagename.yourappname.YourActivity" 
    android:label="@string/your_app_title" 
    android:noHistory="true" > 

一旦添加了noHistory屬性,有關活動從活動歷史猛拉,你就可以迫使你用戶只能按照您的意圖描述轉發。

+0

不,那不是我的意思:)用戶可能會在任何時候回來。如果B成功地收集信息,那麼它應該流向C.但是如果B未能收集信息,則A是唯一的流程,但不是C. – Roylee 2013-04-22 03:58:52

+0

好吧,至少我從你那裏學到了一些東西,你有信譽:) +1 – Roylee 2013-04-22 06:09:40

+1

很高興我無法理解英語產生了有用的結果。 ;) – MarsAtomic 2013-04-22 07:09:49