片段backstack替换问题

时间:2016-02-19 12:55:52

标签: android android-fragments back-stack fragment-backstack

我在backstack中有片段,它是使用(<10)?函数添加的。 当我在没有使用addtobackstack函数的情况下添加片段然后按下后退按钮时,后台堆栈将返回错误的片段。

例如:

使用addtobackstack

替换片段A.

使用addtobackstack

替换片段B.

在不使用addtobackstack

的情况下替换片段C.

使用addtobackstack

替换片段D.

当我在片段D中并按下后退按钮时,我将进入片段A.但是我必须去片段B.

我该如何解决?

谢谢,

1 个答案:

答案 0 :(得分:1)

将此代码放入Activity中然后尝试。

片段后跟Activity,所以当你使用带有标签的addToBackStack()片段或传递null时,会在FragmentManager的帮助下在片组中添加片段。

无需添加ToBackStack()。评论此代码或传递null

@Configuration
public class DIBeforeAutowired {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
        annotationConfigApplicationContext.register(DIBeforeAutowired.class);
        annotationConfigApplicationContext.refresh();
        InjectClass injectClass = annotationConfigApplicationContext.getBean(InjectClass.class);
        injectClass.print();
    }

    @Component
    public static class InstantiationAwareBeanPostProcessorTest extends AutowiredAnnotationBeanPostProcessor {

        public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
            if (bean instanceof InjectClass) {
                System.out.println(((InjectClass) bean).getInjectField());
            }
            return true;
        }

        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            if (bean instanceof InjectClass) {
                System.out.println(((InjectClass) bean).getInjectField());
            }
            return bean;
        }

        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            if (bean instanceof InjectClass) {
                System.out.println(((InjectClass) bean).getInjectField());
            }
            return bean;
        }
    }

    @Component
    public static class InjectField {
        public String getHelloWorld() {
            return "hello world";
        }
    }

    @Component
    public static class InjectClass {

        @Autowired
        InjectField injectField;

        public void print() {
            System.out.println(injectField.getHelloWorld());
        }

        public InjectField getInjectField() {
            return injectField;
        }

    }

}

当您在活动FragmentManager中按后退按钮时,会自动弹出最新添加的片段。

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction();
    fragmentTransaction .replace(R.id.fragment_container, YouNextFragment);
    fragmentTransaction .addToBackStack(null);
    fragmentTransaction .commit();
相关问题