Intereting Posts
Шифровать базу данных SQLite без увеличения размера приложения? Как реализована песочница приложений в Android? Добавить изображение в twitter Какова цель файла «drawables.xml» в каталоге «values»? Некоторые устройства Android рассматривают внутреннее хранилище как SD-карты и внешнее хранилище как EXTSD Android Studio, неожиданно возникла проблема с драйвером GPU при запуске эмулятора Как изменить значок с щелчком мыши с помощью андроид-карт-utils? Jar из проекта библиотеки, не разрешенного в приложении для Android Android kSOAP2 SSL самоподписанные сертификаты «Требования безопасности не выполняются – Нет заголовка безопасности в сообщении» Заменить текущую деятельность Анализ с ошибкой jsoup throws (NetworkOnMainThreadException) Android – BroadcastReceiver не получает пользовательских намерений Альтернативы startActivityForResult KSOAP2: Как использовать HttpsTransportSE? Как изменить изображения с помощью таймера

Причина для проверки сохраненного состояния на frgamentActivity oncreate ()

Я изучаю фрагменты, и я проверил учебник в документах здесь со ссылкой на примеры статей. У нас есть 2 фрагмента для заголовков статей, и при выборе отображается подробный вид статьи (многостраничная компоновка). Я получаю большую часть учебника, за исключением одной небольшой части, поэтому они проверяют сохраненныйInstancestate внутри метода onCreate.

Поэтому мой вопрос касается метода onCreate () активности контейнера. Он имеет эту проверку

if (savedInstanceState != null) { return; } 

Когда я удаляю это, фрагменты перекрываются в ui. Поэтому я знаю, что это предотвращает это, но я не знаю, почему? Я хочу, чтобы кто-то объяснил мне это.

Заранее спасибо.

Изменить: полный метод

  public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); // Check whether the activity is using the layout version with // the fragment_container FrameLayout. If so, we must add the first fragment if (findViewById(R.id.fragment_container) != null) { // However, if we're being restored from a previous state, // then we don't need to do anything and should return or else // we could end up with overlapping fragments. if (savedInstanceState != null) { return; } // Create an instance of ExampleFragment HeadlinesFragment firstFragment = new HeadlinesFragment(); // In case this activity was started with special instructions from an Intent, // pass the Intent's extras to the fragment as arguments firstFragment.setArguments(getIntent().getExtras()); // Add the fragment to the 'fragment_container' FrameLayout getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, firstFragment).commit(); } } 

Я понял.

Дело в том, что: содержащиеся фрагменты активности сохраняются автоматически, если активность разрушена поведением вращения экрана.

Поэтому, когда активность восстанавливается из предыдущего состояния (поворот экрана), метод onCreate () вызывается снова, это означает, что фрагмент будет добавлен снова при повороте экрана (в соответствии с приведенным выше кодом). Поэтому нам нужно проверить внутри метода onCreate (), если мы восстановлены из вращения if (savedInstanceState != null) поэтому нет необходимости повторно добавлять фрагмент, просто ничего не делайте.

SavedInstanceState проверяет последнее сохраненное состояние.

В андроиде всякий раз, когда вы вращаете свое устройство или возвращаетесь с другой активности, общий жизненный цикл Android начинается так, как нужно, например onCreate> onStart> onResume и т. Д. Это означает, что вся ваша деятельность начинается с новой.

Но в savedInstanceState вы получите последнее состояние своего пользовательского интерфейса, которое вы сохранили или используете.