Упрощенный Android (Серия из 3 частей)
Вступление
- В лучшие времена документация по Android может быть ошеломляющей и запутанной, в худшие времена она очень ошеломляющая и очень запутанная. Эта серия надеется свести темы к минимуму и сделать их менее сложными. Для более глубокого понимания жизненного цикла фрагмента, пожалуйста, ознакомьтесь с документацией, которую можно найти ЗДЕСЬ .
Короткая заметка
- Чтобы извлечь максимальную пользу из этого поста, я рекомендую вам иметь базовое представление о Фрагментах , Менеджер фрагментов и Транзакции фрагментов . Я также хочу еще раз подчеркнуть, что это очень упрощенная версия жизненного цикла фрагмента, поэтому, пожалуйста, ознакомьтесь с документацией ЗДЕСЬ если вы хотите более глубокого понимания.
Жизненный цикл фрагмента
- Каждый создаваемый фрагмент имеет свой собственный жизненный цикл. По мере того как пользователь перемещается и взаимодействует с приложением, фрагмент проходит через 5 возможных фаз.
1) ИНИЦИАЛИЗИРОВАННЫЙ 2) СОЗДАНО 3) НАЧАТО 4) ВОЗОБНОВЛЕНО 5) разрушенный
ИНИЦИАЛИЗИРОВАННЫЙ
- когда создается экземпляр фрагмента, он начинается в состоянии
ИНИЦИАЛИЗИРОВАН
. Чтобы фрагмент затем прошел оставшуюся часть своего жизненного цикла, его необходимо добавить вFragmentManager
. Менеджер фрагментов отвечает за определение того, в каком состоянии должен находиться фрагмент, а затем за его перемещение в это состояние. Как только фрагмент был добавлен в диспетчер фрагментов, вызывается обратный вызов onAttach(), чтобы прикрепить фрагмент к его активности хоста. Помните, что фрагменты не могут существовать сами по себе и должны размещаться либо действием, либо другим фрагментом.
ExampleFragment newFragment = new ExampleFragment();//INITIALIZED getSupportFragmentManager().beginTransaction() .setReorderingAllowed(true) .add(R.id.fragment_container_view, newFragment) .commit(); //onAttach() is called after commit()
- Из приведенного выше примера кода: когда мы создаем пример экземпляра фрагмента(), фрагмент переходит в
ИНИЦИАЛИЗИРОВАННОЕ
состояние. Затем мы начинаем транзакцию фрагмента и добавляем новый фрагмент в FragmentManager. Как только транзакция завершена, вызывается функция onAttach(), и фрагмент готов к переходу в следующее состояние жизненного цикла.
созданный
- После добавления фрагмента в FragmentManager и вызова метода onAttach() фрагмент переходит в состояние
СОЗДАН
. В этом состоянии вызываются обратные вызовы, такие как onCreate(), onCreateView() и onViewCreated(). Это состояние является подходящим местом для выполнения таких действий, как настройка адаптеров в RecyclerView. Это также время, когда представление фрагмента раздувается (создается)
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // called after onAttach() and before onCreateView() // is used to reinitialize previously saved data } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){ // called after onCreate() but before onViewCreated() // only used to manually inflate the fragment's View // returns inflated view } @Override public void onViewCreated(View view, Bundle savedInstanceState){ // any extra work that involves the fragment's view is done in // this method }
Из приведенного выше кода: onCreate() вызывается сразу после onAttach() и перед двумя другими методами. Он используется для повторной инициализации ранее сохраненных данных из состояния
savedInstanceState
. onCreateView() вызывается после onCreate(), но до onViewCreated(). Именно в onCreateView() вы можете вручную увеличить представление с помощью класса LayoutInflater. onViewCreated() – это последний вызываемый метод, и именно в нем должна выполняться любая работа, связанная с представлением. параметр вида onViewCreated() – это увеличенный вид, возвращаемый из onCreateView().Для большинства приложений для начинающих вам нужно только по-настоящему понять
СОЗДАННОЕ
состояние и методы, которые оно вызывает. Если вы зашли так далеко и не создали свое собственное приложение, я бы рекомендовал вам попробовать создать свое собственное и выпустить его в магазине Google Play. Это даст вам гораздо более глубокое понимание того, как на самом деле работает жизненный цикл.
начатый
- Как только фрагмент переходит в это состояние, гарантируется, что вид фрагмента доступен. Кроме того, при вводе состояния
НАЧАТО
вызывается метод OnStart(). Также в этот момент фрагмент виден пользователю. метод OnStart() – хорошее место для начала рисования визуальных эффектов.
@Override public void onStart() { super.onStart(); Toast.makeText(getActivity(),"Now onStart() calls", Toast.LENGTH_LONG).show(); //onStart Called }
- Из приведенного выше кода: мы можем вызвать метод OnStart() в любом классе, который расширяет класс Fragment. Если вы запустите этот код, вы должны получить тост с указанием:
Теперь OnStart() вызывает
. Ну, этот код мало что делает, он говорит нам, что наш фрагмент вошел в состояниеНАЧАТО
.
возобновленный
- Это состояние вводится, когда фрагмент виден пользователю и все эффекты анимации и перехода завершены. Это состояние означает, что фрагмент теперь готов к взаимодействию с использованием. Это также состояние, которое запускает обратный вызов onResume().
@Override public void onResume() { super.onResume(); Toast.makeText(getActivity(),"Now onResume() calls", Toast.LENGTH_LONG).show(); //onStart Called }
- Из приведенного выше кода: мы можем использовать тот же код, что и метод OnStart(), но обратите внимание, какой тост появляется первым.
Теперь вызовы OnStart()
появятся первыми, за ними последуетТеперь onResume() вызывает
, который дает нам визуальное подтверждение изменения состояния. состояние переходит изНАЧАТОГО
Квозобновленный
.
разрушенный
- Если фрагмент удален из заднего стека или если Менеджер фрагментов уничтожен, жизненный цикл фрагмента переходит в состояние
УНИЧТОЖЕН
. В этом состоянии фрагмент затем вызывает обратный вызов onDestroy() и указывает, что фрагмент достиг конца своего жизненного цикла. - Для демонстрации обратного вызова
onDestroy()
вам потребуется создать более сложное приложение с несколькими фрагментами. но вы можете использовать приведенный ниже код и просто перемещаться по своему приложению и видеть, когда появится тост. Всплывающий тост будет означать уничтожение фрагмента.
public void onDestroy() { super.onDestroy(); Toast.makeText(getActivity(),"Now onDestroy() calls", Toast.LENGTH_LONG).show(); //onStart Called }
- Спасибо, что нашли время в свой день, чтобы прочитать этот мой пост в блоге. Если у вас есть какие-либо вопросы или проблемы, пожалуйста, прокомментируйте ниже или свяжитесь со мной по адресу Твиттер .
Упрощенный Android (Серия из 3 частей)
Оригинал: “https://dev.to/theplebdev/android-simplified-fragment-lifecycle-3j5a”