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

Solutions Collecting From Web of "Android FragmentTransaction commit Когда?"

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

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

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

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

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

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

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

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