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

Как вырезать фрагмент

У меня есть активность A, которая вызывает фрагмент Bf, который вызывает фрагмент Cf. Я хочу, чтобы Bf был помещен в backstack, когда вызывается Cf, чтобы пользователи могли вернуться к нему. Однако, если в Cf нажата конкретная кнопка, я бы хотел, чтобы Bf удалялся из задней части. Возможно ли это?

Я вижу, что есть функция popBackStack(). Однако я немного смущен тем, как это будет работать. Безопасно ли использовать эту функцию? Есть ли вероятность того, что действие из другого приложения будет вставлено после Bf в стопку?

Кроме того, есть ли способ изменить сохраненный элемент состояния фрагмента в стопке?

Я просто не могу понять, как сделать надежный тест на backstack с помощью эмулятора.

4b9b3361

Ответ 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

  1. Просто добавьте эту линию

        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() {
            }
        });
    }