конфликты executePendingTransaction - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть глобальная загрузка fragment - полупрозрачный вид с индикатором загрузки, я использую его для отображения процесса загрузки, а не для создания индикатора загрузки в каждом фрагменте, я присоединяю его с помощью транзакции add (также я используютот же экземпляр, я не создаю каждый раз новый фрагмент).

Проблема в том, что некоторые процессы "загрузки" очень быстрые и выглядят как remove(), вызываемый до того, как TransactionManager выполнит транзакцию,другими словами, я пытаюсь удалить фрагмент, который еще не был добавлен (loadingFragment.isAdded()==false), чтобы решить эту проблему, я пытаюсь использовать executePendingTransactions() после add() метода, это решает эту проблему, но приводит к другой проблеме:

FragmentManager уже выполняет транзакции

Где находится баланс? как избежать такого рода конфликтов?

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

Я могу предложить два решения:

  1. Используйте FragmentTransaction.commitNow() для фиксации фрагмента добавления синхронно с этим вызовом.

  2. Это такобходного пути. Подождите, пока добавление не будет завершено. Вы можете опубликовать свой вызов на удаление в главной теме. Если это не работает, добавьте задержку.

0 голосов
/ 06 ноября 2019

К сожалению, я не смог решить эту проблему с помощью фрагментов.

commitNow() не требует обратного стека, и большинству моих фрагментов требуется обратный стэк, поэтому commitNow() только для LoadingFragment может также конфликтовать с FragmentManager is already executing transactions, и задержка после публикации не имеет смысла для меня.

Вместо этого я использовал пользовательский макет (в одном приложении активности).

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