2013-11-15 202 views
1

這裏的另一項活動是我的活動方案:啓動活動將堆棧

A1 - > A2 - >(A3) - > A4

我目前在A2,我想從去A2直接轉到A4,但如果用戶按下A4中的後退按鈕,則轉到A3。如果用戶按下A3中的後退按鈕,則轉到A2,並且如果用戶按下A2中的後退按鈕,則轉到A1。哪一個是實現這一目標的最佳方式?

我已經試過三個不同的選項至今:

  1. 使用TaskStackBuilder:無法實現正是我想要的,因爲我是創建活動的一個新的堆棧,所以A1和A2在那裏重建(我寧願他們不要被重新創建)。

  2. 從A2連續調用startActivity(A3)和startActivity(A4)。

  3. 從A2調用startActivity(A3),設置一個Intent Extra。在A3的onCreate()方法中,檢查Intent Extra的值,並根據它的值自動啓動A4。

您認爲哪一種方法可以達到我想要的效果?

回答

1

我不知道這是一個很好的用戶體驗。爲什麼用戶希望看到A3,如果他按下A4中的BACK按鈕?

但是,如果這是你想要做的,我肯定會選擇第三種選擇。 A2應該啓動A3並傳遞一個額外的信息告訴A3立即啓動A4。從編碼的角度來看,這種選擇是最直接的,如果他們必須維護它,對其他人來說很容易。

+0

我想要這樣做的主要原因是因爲A2是一種通知中心。我想通過創建足夠的路線/活動堆棧將用戶重定向到選定的內容。 – neoxigen

+0

在選擇#3中,我將不得不爲每個要重定向到另一個活動的活動修改onCreate()方法。在選擇#2中我不需要那樣做。考慮到這一點,你是否仍然認爲#3是最佳選擇? – neoxigen

+0

是的,我仍然認爲#3是最好的選擇。重定向到另一個活動就像2行代碼。至少這可以讓你清楚6個月後回去看看你在做什麼。我一直推薦這種類型的「調度員」活動來解決您需要以非Andoid直接支持的方式更改正常導航流程的情況。 –

0

從A2創建A4;

在A4上攔截回按事件;

重寫它並創建A3完成A4。

我覺得這是一個很好的解決方案,因爲用A3你不會真的回來。該系統將快樂:)

在A4

public void onBackPressed() { 
    finish(); 

    Intent intent = new Intent(this, A3.class);  
    startActivity(intent); 
} 
+1

如果A3引用了A4,那麼您的代碼將創建一個新的A3,在大多數情況下這不是真正的交易 –

+0

您是對的:)我的解決方案是針對靜態路由。所以#2是最好的。 –

+0

感謝您的回答。正如史蒂夫所說,我也希望能夠訪問A4槽A3 – neoxigen