У меня есть два фрагмента - А и Б - оба фрагмента занимают весь экран. Когда я загружаю свою активность, я показываю пользовательский фрагмент A, в то время как в фоновом режиме я загружаю фрагмент B (в менеджере фрагментов я заменяю фрагмент A, а затем добавляю и скрываю фрагмент B). Оба фрагмента имеют относительно похожие макеты (или, по крайней мере, было бы справедливо сказать, что макет A непосредственно перед переходом похож на начальный макет B — представления перемещаются), и когда я хочу перейти от A к B, я делаю «показать» на B и «скрыть» на A. Это почти идеально работает, но вы все еще можете видеть короткую вспышку белого между ними, прежде чем B будет показан, и это разрушает иллюзию того, что оба являются одним и тем же фрагментом. Как я могу перейти так, чтобы пользователь не заметил?
Пара слов пояснения, почему фрагментов два, а не один — бизнес-логика отдельная. Каждый фрагмент имеет дело с отдельной частью потока, и объединять их не имеет смысла.
Вещи, которые я пробовал до сих пор:
• как я сказал выше, я пытался добавить B в фоновом режиме и делать «показ» на нем только тогда, когда это необходимо - чтобы сэкономить время на настройку
• Я пытался переопределить ожидающий переход и добавить затухание/затухание, но это не помогло.
• Я пытался скрыть фрагмент A вместо его удаления при отображении фрагмента B, но это не помогло.
• Я попытался переопределить ожидающий переход с помощью 0,0 (полностью избавиться от переходов), но все по-прежнему.
Код:
getSupportFragmentManager().beginTransaction()
.replace(R.id.contentBlock, fragmentA, "FRAGMENTA")
.add(R.id.contentBlock, fragmentB)
.hide(fragmentB)
.commit();
и позже:
getSupportFragmentManager().beginTransaction()
.show(fragmentB)
.remove(fragmentA)
.commit();