2011-12-01 170 views
4

我有兩個活動A,B。現在,從A按下按鈕(使用startActivity())呼叫B,然後按返回鍵返回到A.現在當我再次按下按鈕去B時,新的活動被調用(如預期的那樣)。保存活動狀態

現在有人能告訴我如何顯示以前的B狀態嗎?

我看了這篇文章 Saving Android Activity state using Save Instance State,但忍不住:(

public class B extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main1); 

    if(savedInstanceState!=null){ 
     EditText editText=(EditText)findViewById(R.id.editText1); 
     editText.setText(savedInstanceState.getString("EditBox")); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle onSaveInstanceState) { 
    System.out.println("B.onSaveInstanceState()"); 
    super.onSaveInstanceState(onSaveInstanceState); 
    onSaveInstanceState.putString("EditBox","Hello"); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    System.out.println("B.onRestoreInstanceState()"); 
    super.onRestoreInstanceState(savedInstanceState); 
    EditText editText=(EditText)findViewById(R.id.editText1); 
    editText.setText(savedInstanceState.getString("EditBox")); 
}} 

我班

public class A extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button button=(Button)findViewById(R.id.button1); 
    button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i=new Intent(StartActivityforresultActivity.this,B.class); 
      startActivity(i); 
     } 
    }); 


} 

回答

6

有了這聽起來像你想你有沒有兩個選項: 1.當調用B的onDestroy或onBackPressed時,保存B的狀態,您必須將其保存到內存或使用某種持久性(SharedPreferences,本地文件等)寫出它。開始,檢查s如果該數據存在並使用它來加載狀態。 2.覆蓋onBackPressed,這樣當它被按下時,你不會調用super.onBackPressed。在調用startActivity之前,請啓動活動A的實例並將您的意圖標誌設置爲FLAG_ACTIVITY_REORDER_TO_FRONT。因此,像這樣:

Intent intent = new Intent(this, A.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
    startActivity(intent); 

現在,當你打回來,就應該找一個的實例,它是在你的活動堆棧,只是把它帶到前面。您也可以在啓動B時添加相同的標誌。

+0

謝謝,你的解決方案是完美的(我試過選項2)。但我不想重寫onBackPressed,因爲我不知道哪個活動調用了當前活動回去我使用活動堆棧。爲了更清楚我有A,B,C,D活動,現在A調用B,C(取決於某些條件),然後調用D。我希望你得到它:) –

+0

你能給我一些關於事件流的更多信息。 活動A去B,如果你回來,它應該去A. 活動B去C,如果你回擊它應該去B,然後A. 等? – Chris

+0

屏幕流A> B> D(A去B和B去D),A> C> D。現在,當我在D我不知道哪項活動稱爲此活動。所以我正在尋找一些通用的解決方案。 (儘管我可以在意圖中使用一些參數,但我正在尋找一些通用的解決方案) –