我在backstack中有片段,它是使用(<10)?
函数添加的。
当我在没有使用addtobackstack
函数的情况下添加片段然后按下后退按钮时,后台堆栈将返回错误的片段。
例如:
使用addtobackstack
使用addtobackstack
在不使用addtobackstack
使用addtobackstack
当我在片段D中并按下后退按钮时,我将进入片段A.但是我必须去片段B.
我该如何解决?
谢谢,
答案 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();