Fragment的回退栈

因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。

如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。

但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。

当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。



Activity切换时,相信大家都知道是通过栈的形式,不断压栈出栈,在Fragment的时候,如果你不是手动开启回退栈,它是直接销毁再重建,但如果将Fragment任务添加到回退栈,情况就会不一样了,它就有了类似Activity的栈管理方式。


也就是说,当Fragment被压到回退栈中的时候,没有被销毁。

示例代码:“

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.f_activity);

fragmentManager = getSupportFragmentManager();

Button one = (Button) findViewById(R.id.one);
Button two = (Button) findViewById(R.id.two);
Button three = (Button) findViewById(R.id.three);
one.setOnClickListener(this);
two.setOnClickListener(this);
three.setOnClickListener(this);
}

@Override
public void onClick(View v) {
//开启事物
FragmentTransaction transaction = fragmentManager.beginTransaction();
switch (v.getId()){
case R.id.one:
transaction.replace(R.id.content,new Fragment1());
break;
case R.id.two:
transaction.replace(R.id.content,new Fragment2());
transaction.addToBackStack(null);
break;
case R.id.three:
transaction.replace(R.id.content,new Fragment3());
transaction.addToBackStack(null);//会把本次提交的Fragment都提交到回退栈, // 不管有有多少
break;
}

transaction.commit();
}

猜你喜欢

转载自blog.csdn.net/guoinhere/article/details/53439829