Подтвердить что ты не робот

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() совершил транзакцию, чтобы я мог выполнить некоторую работу с добавленным фрагментом? Кроме того, есть ли способ подождать, пока произойдет фиксация, а затем продолжить с остальной частью кода?

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

Христоса

4b9b3361

Ответ 1

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

Ответ 3

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

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

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

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

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