2014-02-05 39 views
1

我有兩個不同的活動,第一個是我在某些EditTexts中輸入一些信息,然後進入第二個活動,但是當我返回時,第一個活動中EditTexts上的文本是不見了。Bundled savedInstanceState始終爲空

這裏是在OnCreate()的第一個活動:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.act_frm_recetas); 

    txtClient = (EditText) findViewById(R.id.txtNombreCliente); 

      if(savedInstanceState != null){ 
       String client = savedInstanceState.getString("Client"); 

       txtClient.setText(client); 
      } 
} 

我使用的方法的onSaveInstanceState保存信息

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 

    String x = txtClient.getText().toString(); 
    savedInstanceState.putString("Client", x); 

    super.onSaveInstanceState(savedInstanceState); 
} 

在做調試,我可以看到savedInstanceState Bundle的確在onSaveInstanceState方法中填充,但在OnCreate中顯示爲null。

也許我必須在第二個活動中添加一些東西?除了讓我回到第一個活動的按鈕,我目前沒有任何東西。

+0

如果你調用'super.onSaveInstanceState(savedInstanceState)'作爲'onSavedInstanceState'方法的第一行會發生什麼? – Phil

+0

仍然返回null – Oscar

+0

「第一個活動中EditTexts上的文本消失了」 - 唯一可能發生的方式是,如果您清除了它們,如果將它們替換爲新實例,或者第一個活動被銷燬一些原因。您可以通過查看是否調用了「onDestroy()」來確定後一種情況。 – CommonsWare

回答

-1

我猜onCreate被調用時,活動要加載到內存中,並在那時活動不包含任何東西。這就是爲什麼它總是返回null。

保存數據,你有onsaveinstance方法,並恢復你有onrestoreinstance方法。

onSaveInstanceState()是一種用於在暫停活動之前存儲數據的方法。

onRestoreInstanceState()是用於檢索該數據的方法。

+0

那麼有沒有一種方法可以保存該信息,以便稍後再次加載活動時使用它? – Oscar

+0

是的。你可以使用sharedpreferences –

+0

我搜索了共享首選項,它工作!謝謝! – Oscar

0

您需要撥打super.onSaveInstanceState(savedInstanceState);作爲onSaveInstanceState方法的第一行。

接下來你需要把

if(savedInstanceState != null) { 
      String client = savedInstanceState.getString("Client"); 

      txtClient.setText(client); 
    } 

onRestoreInstanceState方法。 onCreate僅在重新繪製應用程序時調用。

+0

已經添加了onRestoreInstanceState方法,它沒有奏效,但是在執行調試之後,它看起來像程序從不使用該方法(即使使用@Override) – Oscar

0

它顯示了空,因爲的onCreate僅當第一次創建活動叫,當您從第二個活動返回回來時,再顯示在它的onResume你的第一個activity..try()方法

0

我的猜測是第一個活動沒有被破壞,所以當你回到第一個活動時,創建從不會被調用