Android FragmentTransaction commit Когда?

Я создаю приложение для планшета. В этом приложении есть одно действие с двумя фрагментами. Первый фрагмент – это «известный» фрагмент списка, который показывает простой список макетов элементов из запроса базы данных, второй фрагмент показывает подробности о выбранной записи (из фрагмента списка). Мысль со вторым фрагментом заключается в том, что его тип зависит от записей, отображаемых в списке. Например, если записи являются клиентами, тогда отображаются данные выбранного клиента, если они являются элементами инвентаря, отображаются данные выбранного элемента и т. Д. Чтобы связаться с фрагментом деталей, я создал интерфейс, который реализует каждый фрагмент фрагмента. Фрагмент списка «фиксирован» в активности из макета xml. Фрагмент детали, однако, создается во время создания действия следующим образом:

super.onCreate(savedInstanceState); setContentView(R.layout.act_hlpfiles_host); ..... FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.laydetailsfragment, FragmentsPool.getHelperFileFragment(501), "recordDetails"); fragmentTransaction.commit(); myDetailsFragment = getFragmentManager().findFragmentByTag("recordDetails"); ... myListFragment = (frg_hlpfiles_lstrecords) getFragmentManager().findFragmentById(R.id.frg_lstrecords); .... } 

Проблема с этим кодом заключается в том, что myDetailsFragment всегда имеет значение null. Это происходит потому, что фрагментTransaction.commit () не запускается немедленно, но он происходит в основном потоке в следующий раз, когда поток готов (как указано в документации по android).

Если я создам фрагмент детали в onStart () и создаю экземпляр фрагмента списка в onCreate, все работает нормально.

Поэтому возникает вопрос: как я могу быть уверенным, что фрагментTransaction.commit () зафиксировал транзакцию, чтобы я мог выполнить некоторую работу с добавленным фрагментом? Кроме того, есть ли способ подождать, пока произойдет фиксация, а затем продолжить с остальной частью кода?

Спасибо за ваше время и усилия,

Christos

Попробуйте выполнить функцию fragmentManager.executePendingTransactions() после совершения транзакции, но прежде чем найти тег и посмотреть, работает ли это для вас.

В Android API 24 FragmentTransaction имеет синхронный .commitNow() . Теперь он находится в ссылке: https://developer.android.com/reference/android/app/FragmentTransaction.html#commitNow ()

Напротив, .commit() работает асинхронно. Он просто планирует совершение транзакции.

"…. так что я могу сделать некоторую работу с добавленным фрагментом ? Кроме того, есть ли способ подождать, пока произойдет фиксация, а затем продолжить с остальной частью кода ?"

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

При обратном вызове, когда выбран элемент списка выбора (чтобы изменить фрагмент детали), вы сможете в достаточной степени получить фрагмент деталей.

Кроме того, у вас уже есть фрагмент из возврата FragmentsPool.getHelperFileFragment(501), поэтому я не понимаю, почему вам нужно получить фрагмент через его тег.

Мне интересно узнать, какую работу вам нужно сделать в onCreate с фрагментом добавленных деталей.

Intereting Posts
Развернуть Поиск Открыть, чтобы использовать всю панель действий (скрыть другие вещи) Вход с аппаратной клавиатуры теряет фокус Сбросить панель действий после использования SearchView Что такое значение boolean, возвращаемое из метода обработки событий в Android Получение результата поиска Google для приложения Android Отображение веб-представления «Android WebCore в этом случае не поддерживается» Предупреждение Обновление IntelliJ до версии 10.5 и Android не сработает Android SDK не указан Android Espresso: как утверждать, что представление не должно отображаться Как определить, что вызов, сделанный на Мобильный номер, является локальным или STD ИЛИ ISD PhoneGap Build Push Notification (Android) Android программно рисует изображение как фон Код переключения между режимами отладки и режима выпуска в java – android Android – отображать снимок изображения под изображениями в Gridview Android: сгруппированные уведомления и резюме все еще показаны отдельно на 4.4 и ниже Перехват полученных SMS-сообщений в Delphi XE5 для Android