Должен ли я заменить фрагмент или изменить текущий? - PullRequest
1 голос
/ 19 марта 2019
  • Фрагменты могут быть добавлены / заменены / удалены динамически в коде.Я использовал этот метод для своих проектов.

  • Однако мне интересно, в чем будет разница (в основном в производительности), если вместо создания нового фрагмента добавить его или заменить текущиймы просто берем дескриптор к текущему и модифицируем его.

  • Например, рассмотрим этот простой сценарий, где единственная цель фрагмента - показать изображение, и мы хотимизмените это изображение:

Вариант 1) Создайте новый экземпляр моего класса Fragment и замените фрагмент, который отображается в данный момент:

MyFragmentClass fr = new MyFragmentClass();
fr.setImage(1);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.frame_layout_id, f)
...

Вариант 2) Просто захватитессылка на текущий отображаемый фрагмент и изменение его:

MyFragmentClass fr = (MyFragmentClass)
                fragmentManager.findFragmentById(R.id.frame_layout_id);
fr.setImage(1);

Весь ли процесс создания нового экземпляра фрагмента и добавления его более эффективен, чем вызов findFragmentById?

1 Ответ

0 голосов
/ 19 марта 2019

Просмотрите следующую информацию, возможно, вы получите разъяснение

1- фрагментTransaction.addToBackStack (str); Добавьте эту транзакцию в задний стек.Это означает, что транзакция будет запомнена после ее фиксации и будет отменять свою работу при последующем извлечении из стека.

2- fragTransaction.replace (int containerViewId, Fragmentgment, String tag) Заменяет существующий фрагмент, который был добавлен в контейнер.

По сути, это то же самое, что вызывать remove (Fragment) для всех добавленных в данный момент фрагментов, которые были добавлены с тем же containerViewId, а затем добавить (int, Fragment, String) с теми же аргументами, что и здесь.

3- FragmentTransaction.add (int containerViewId, Фрагмент фрагмента, тег String) Добавить фрагмент в состояние активности.Этот фрагмент может также иметь свое представление (если Fragment.onCreateView возвращает ненулевое значение) в контейнерное представление действия.

Что означает замена уже существующего фрагмента и добавление фрагмента в действиесостояние и добавление активности в задний стек?

Существует стек, в котором хранятся все действия в рабочем состоянии.Фрагменты относятся к деятельности.Таким образом, вы можете добавить их, чтобы встроить в действие.

Когда вы переходите к текущему макету, у вас есть идентификатор этого контейнера, чтобы заменить его нужным фрагментом.

Вы можететакже вернитесь к предыдущему фрагменту в backStack с помощью метода popBackStack ().Для этого вам нужно добавить этот фрагмент в стек, используя addToBackStack () и затем commit () для отражения.Это в обратном порядке с текущим сверху.

findFragmentByTag does this search for tag added by the add/replace method or the addToBackStack method ?

Если зависит от того, как вы добавили тег.Затем он просто находит фрагмент по тегу, который вы определили ранее, либо при накачке из XML, либо при предоставлении при добавлении в транзакцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...