2012-01-08 34 views
1

我有3個活動A,B和C.擊中後退按鈕但不殺死活性,並讓它處於返回堆棧(機器人)

我上的按鈕點擊動態膨脹活性B和用戶可以添加儘可能多的意見,他喜歡。

的操作是這樣的:

用戶看到「活動」第一進入他的詳細信息並點擊保存按鈕,我帶他去「活動B」,他補充說某些領域儘可能多的時候,他喜歡和時他再次點擊保存我將他帶到「活動C」。

現在當我在A並去B並添加一些視圖並在TextViews中輸入文本,然後點擊保存並轉到C.從C如果我回擊我看到B與所有充氣視圖完好無損並輸入很明顯,因爲它保存在Back Stack中,但是如果我通過回擊從B返回到B,所有視圖都消失了,因爲它從Back Stack中移除。

我想知道是否有可能在BackStack中僅保留一個B實例,並且在用戶返回時根本不殺死它? 我已經覆蓋後退鍵但無濟於事,因爲活動無論如何都被殺死了,有些人建議我應該將整個視圖和數據從它保存到Parcelable ArrayList並在onCreate中再次生成它們,但對我而言這並不可行,因爲我無論如何,我們可以將它保存在BackStack中。

我碰到這個指南來了在Android開發者http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html它說這些活動屬性

android:taskAffinity 
android:launchMode 
android:allowTaskReparenting 
android:clearTaskOnLaunch 
android:alwaysRetainTaskState 
android:finishOnTaskLaunch 
android:singleTask 
android:singleInstance 

但我不知道如何把他們使用。

有沒有人試過這個呢?如果是這樣,請幫我把這些碎片放在一起。

+1

您無法保證您的應用程序的任何組件都會在任何給定的時間內存在。這包括活動和服務。如果您的應用運行的設備運行資源不足,則Android操作系統將終止任何內容以及它認爲當前未使用的所有內容。如果您接受用戶數據,那麼您必須採取措施以某種方式堅持它,而不要依賴於選擇返回或重新創建時堆棧可能存在或不存在的事實。從你的問題「......但這對我來說看起來不太可行......」 - 我建議你重新思考,因爲這是唯一的保證方式。 – Squonk 2012-01-08 11:57:48

+0

你已經覆蓋了後退按鈕,它仍然回去?你在調用super()方法嗎? – MikeIsrael 2012-01-08 12:31:48

+0

@MikeIsrael:Ive嘗試過沒有超級但它仍然會殺死活動,即使它沒有被殺死,那麼你將如何阻止開始活動B的新實例呢?它總是作爲一項新的活動開始的嗎? – 2012-01-08 12:54:46

回答

1

是的,我同意Nandeesh。

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
      switch(keyCode) 
      { 
      case KeyEvent.KEYCODE_BACK: 
       //bring back the previous activity do your logic here   
       return false; //means you don't want to remove the activity from stack 
      } 
     return super.onKeyDown(keyCode, event); // means u want to remove the last activity from Activity stack. 
    } 

    so question is that how u can go to other activity without remove it from stack, 
    you can use : 
       Intent myIntent = new Intent(CurrentClass.this, JumptoActivity.class); 
       startActivity(myIntent);* 

example: at the switch case u can use this 

if(KeyEvent.KEYCODE_BACK) 
{ 
       Intent myIntent = new Intent(CurrentClass.this, NextActivity.class); 
       startActivity(myIntent); 
       return false; 
} 
else 
    return true;  //if you not write this then your menu and other think will be affected. 

謝謝我認爲這一點信息將對你有所幫助。

+0

謝謝,但我應該如何確保android不創建Activity B的新實例,我想使用已經在堆棧中的活動。 – 2012-01-08 12:56:56

+0

使用FLAG_ACTIVITY_REORDER_TO_FRONT作爲意圖,同時啓動 – nandeesh 2012-01-08 13:01:46

+0

使用你的代碼作爲後退鍵,但它仍然會殺死它。 – 2012-01-09 06:56:52

1
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

     switch(keyCode) 
     { 
     case KeyEvent.KEYCODE_BACK: 
      //bring back the previous activity do your logic here   
      return false; 
     } 
    return super.onKeyDown(keyCode, event); 
} 

您可以使用此功能,返回false時,活動不應該被關閉。使用FLAG_ACTIVITY_REORDER_TO_FRONT啓動之前的活動

相關問題