2013-04-16 64 views
2

所以,我有一個問題!Android - 與其他活動互動

我得到了一個名爲X的活動。當用戶點擊一個按鈕時,顯示活動Y. 我希望這個活動可以在收到活動X發送的活動後關閉。

你知道我該怎麼做?

+0

記住ActivityX不再存在時ActivityY顯示... – Selvin

+0

它確實存在,只是它對用戶不可見 – Carnal

+0

不......它可以被殺死......即使你可以回到它(回棧),它並不意味着它將是相同的實例...它可以被重新處理... – Selvin

回答

3

發送一個BroadcastMessage從X.在y中註冊BroadcastReceiverIntentFilter相同。因此,從x您可以發送預定義的退出消息,這將由y活動的onReceive方法捕獲。在那裏,你可以結束活動Y.

例如: Y中的活動

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      if (extras.containsKey("exit")) { 
       finish(); 

      } 
     } 
    } 

不要忘記註冊接收

registerReceiver(
      mMessageReceiver, 
      new IntentFilter(Constants.YOUR_INTENT_FILTER)); 

和註銷

unregisterReceiver(mMessageReceiver); 

X中的活動:

send the broadcastmessage using `sendBroadcast(Intent i)` 

對於這種內部消息的,我更喜歡LocalBoradcastManager

+2

這是正確的答案! – Carnal

+0

partally correct ... sendBroadcast(意圖我)不應該從ActivityX調用,但從服務(在ActivityY啓動之前從ActivityX開始) – Selvin

+0

@Selvin。如果他們沒有服務怎麼辦?我可以直接從活動調用(我用localbroadcastmanager) – stinepike

0

不幸的是你不能有兩個活動「跑」在同一時間。活動X經過生命週期的其最終當你開始活動Y.

參見:http://developer.android.com/guide/components/activities.html

每當一個新的活動開始,以前的活動已停止,但系統會保留在堆棧中的活動( 「後退」)。當一個新的活動開始時,它會被推到後面的堆棧並且獲得用戶焦點。後退堆棧遵循基本的「後進先出」堆棧機制,因此,當用戶完成當前活動並按下後退按鈕時,它會從堆棧中彈出(並銷燬),並恢復前一個活動。 (後面的堆棧在「任務和後退堆棧」文檔中有更多的討論。)

0
  • 當您收到BroadcastMessageActivityX那麼你可以設置一個全球boolean
  • 的價值,你應該在使用Activity Y(它可能在onCreate) 的時間檢查bolean的那個值Activity Y

  • ,如果你得到這個布爾值true(或任何你在呼叫BroadcastMessage的時間設置),則只需撥打finish()

事情就是Android並不是沒有具有活性的同時運行兩個活動,讓 你不能完成它遠程