2014-02-05 2 views
1

У меня есть два разных вида деятельности, в первом я ввожу некоторую информацию в некоторые EditTexts, затем перехожу во второе действие, но когда я возвращаюсь, текст, который был на EditTexts в первом действии, прошло.Bundle savedInstanceState всегда null

Вот 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 в show 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

Я искал sharedpreferences, и он сработал! Благодаря! – 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 вызывается только тогда, когда эта деятельность сначала создается, когда вы вернетесь обратно из второй активности, он возобновляет свой первый activity..try показывая его на onResume() метод

0

Моя догадка что первое действие не было уничтожено, поэтому onCreate никогда не вызывается, когда вы возвращаетесь к первому действию

Смежные вопросы