Как вырезать фрагмент
У меня есть активность A, которая вызывает фрагмент Bf, который вызывает фрагмент Cf. Я хочу, чтобы Bf был помещен в backstack, когда вызывается Cf, чтобы пользователи могли вернуться к нему. Однако, если в Cf нажата конкретная кнопка, я бы хотел, чтобы Bf удалялся из задней части. Возможно ли это?
Я вижу, что есть функция popBackStack(). Однако я немного смущен тем, как это будет работать. Безопасно ли использовать эту функцию? Есть ли вероятность того, что действие из другого приложения будет вставлено после Bf в стопку?
Кроме того, есть ли способ изменить сохраненный элемент состояния фрагмента в стопке?
Я просто не могу понять, как сделать надежный тест на backstack с помощью эмулятора.
Ответы
Ответ 1
Вы можете поместить фрагмент по имени. Добавляя фрагменты в задний стек, просто дайте им имя.
fragmentTransaction.addToBackStack("fragB");
fragmentTransaction.addToBackStack("fragC");
Затем в Fragment_C поместите задний стек, используя имя ie.. fragB
и включите POP_BACK_STACK_INCLUSIVE
someButtonInC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getActivity()
.getSupportFragmentManager();
fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
Ответ 2
Три способа вырезать фрагмент с BackStack
-
Просто добавьте эту линию
getActivity().getSupportFragmentManager().popBackStack();
2. #
getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
3. #
getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
его легкий способ поп-фрагментации с backdtack
Ответ 3
сначала заменяя фрагмент container_view, тогда мы добавляем имя как "Поздняя транзакция"
getSupportFragmentManager().beginTransaction().replace(R.id.container_view,
profileFragment, "Profile").addToBackStack("Later Transaction").commit();
затем нажмите на кнопку "Назад" и вставьте задний стек, используя название Поздней транзакции.
int count = getSupportFragmentManager().getBackStackEntryCount();
if(count > 1) {
getSupportFragmentManager().popBackStack("Later Transaction",
FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
DialogUtils.show(HomeActivity.this,
getString(R.string.exit_app_message), getString(R.string.alert),
"Yes","No", new DialogUtils.ActionListner() {
@Override
public void onPositiveAction() {
finish();
}
@Override
public void onNegativeAction() {
}
});
}