2013-07-17 110 views
0

我正在編寫Android 4.X應用程序。Android活動導航循環

大多數活動都以樹形結構工作(所以堆棧對他們來說是完美的)並且「返回」按預期工作。

我有一個循環,我的活動設計

-> list messages -> view message -> ack -> reply - 
|             | 
-------------------------------------------------- 

這將積聚在堆棧上的活動。

如何從堆棧中完成回覆kill本身以及'ack'和'view message'活動,而不是創建新的'list message'活動?

這是解決Android應用程序導航循環的正確方法嗎?

+0

不知道這是否是做的最好的方法,但你可以開始與結果每一次活動,而當你完成回覆活動,你可以告訴ACK活動在告知其父母活動做同樣的事情之後關閉自己,等等。 –

回答

1

你可以做startActivityForResult(Intent intent);和onActivityResult()你可以做的東西。

0

這裏的人誰需要它的代碼示例...

ListMessages

public void next() { 
     Intent intent = new Intent(getApplicationContext(), ViewMessages.class); 
     startActivity(intent); 
    } 

ViewMessages

public void next() { 
     Intent intent = new Intent(getApplicationContext(), AckMessage.class); 
     startActivityForResult(intent, 0); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != Activity.RESULT_OK) return; 
     finish(); 
    } 

AckMessage

public void next() { 
     Intent intent = new Intent(getApplicationContext(), ReplyMessage.class); 
     startActivityForResult(intent, 0); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != Activity.RESULT_OK) return; 
     setResult(Activity.RESULT_OK); 
     finish(); 
    } 

ReplyMessage

public void complete() { 
     setResult(Activity.RESULT_OK); 
     finish(); 
    } 
0

我想我對你的問題有另一個簡單的解決方案。 從循環中的上一個活動開始。你可以開始第一個活動的標誌:

Intent intent = new Intent(LastActivity.this, FirstActivity.class); 
           intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
           intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

它會從堆棧中刪除FirstActivity上方的所有活動。並且將在FirstActivity中調用onNewIntent()方法。

您可以查看詳細信息here