Почему объект Bundle всегда равен null для onCreate ()? - PullRequest
8 голосов
/ 13 ноября 2011

Я пытаюсь заняться программированием под Android, и я взял несколько примеров из книги.В этом примере предлагается ввести следующий код:

public class ExemploCicloVida extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        Log.i(TAG, getClassName() + " onCreate() called on: " + icicle);

        TextView t = new TextView(this);
        t.setText("Exemplo de ciclo de vida de uma Activity.\nConsulte os logs no LogCat");
        setContentView(t);
    }
}

Интересно, почему объект Bundle всегда имеет значение null в этом случае.

Ответы [ 4 ]

14 голосов
/ 13 ноября 2011

Пакет будет нулевым, если нет ранее сохраненного состояния.

Это упоминается в документации Activity API .

9 голосов
/ 06 февраля 2014

В моем случае причина была в том, что в конкретном действии не было объявленной темы в файле манифеста.

Чтобы это исправить, откройте AndroidManifest.xml, нажмите «Приложение», выберите сбойную активность в узлах приложения и добавьте тему в поле «Атрибуты». В моем случае это было

@style/Theme.AppCompat.Light.DarkActionBar

но вы можете скопировать тему из одного из других ваших занятий.

P.S .: Я знаю, что это ответ на старый вопрос, но я наткнулся на него во время поиска исправления и не нашел работающего решения, так что это могло бы помочь другим.

2 голосов
/ 13 ноября 2011

Запустите этот код и поверните экран, нажав Ctrl + F11. Пакет не будет нулевым.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (savedInstanceState != null) {
        Toast.makeText(this, savedInstanceState.getString("s"),
                Toast.LENGTH_LONG).show();
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putString("s", "hello");
}

onSaveInstanceState(Bundle) будет вызван. Затем создается объект действия, и onCreated(Bundle) будет вызываться с ненулевым Bundle savedInstanceState.

0 голосов
/ 14 мая 2014

Полагаю, вы хотели бы прочитать параметры, связанные с вашей деятельностью. Используйте эту функцию:

protected String getStringExtra(Bundle savedInstanceState, String id) {
String l;
l = (savedInstanceState == null) ? null : (String) savedInstanceState
            .getSerializable(id);
if (l == null) {
    Bundle extras = getIntent().getExtras();
    l = extras != null ? extras.getString(id) : null;
}
return l;
}
...