activity嵌套fragment 并 启动activity

发布时间 2023-04-26 17:57:43作者: xiaowang_lj

1.MainActivity

FragmentManager fragmentManager;
FragmentTransaction transaction;

private void replaceFragment(Fragment fragment) {
        // 1.获取FragmentManager,在活动中可以直接通过调用getFragmentManager()方法得到
        fragmentManager =getSupportFragmentManager();
        // 2.开启一个事务,通过调用beginTransaction()方法开启
        transaction = fragmentManager.beginTransaction();
        // 3.向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例
        transaction.replace(R.id.fr_container, fragment);  //fr_container不能为fragment布局,可使用线性布局相对布局等。
        // 4.使用addToBackStack()方法,将事务添加到返回栈中,填入的是用于描述返回栈的一个名字
        transaction.addToBackStack(null);
        // 5.提交事物,调用commit()方法来完成
        transaction.commit();
    }

2.fragment 启动Activity

@Override
    public void onResume() {
        super.onResume();
        Intent intent = new Intent();
        intent.setClass(getActivity(),
                AdjustResolutionDialogActivity.class);
        //intent.putExtra(EXTRA_PREFERENCE_KEY, curMode);
        getActivity().startActivity(intent);
    }

那我们就通过上节的代码在Activity中和Fragment01和Fragment02中加入log, 关于代码我就不需要贴出了,我们用Log分析。

a:在Activity中启动Fragment01

可以看到这个和上图的流程是一样的。

b:然后按back键返回

可以看到显示Fragment先暂停,Activity再暂停,接着是Fragment停止,Activity停止,接着是Fragment销毁,Activity销毁

c:当启动Fragment01后,按Home按键

可以看到显示Fragment先暂停,Activity再暂停,接着是Fragment停止,Activity停止

d:在c种情况下后,然后再次启动该应用

可以看到先是Activity先重新启动,然后是Fragment再次启动,接着是Activity运行,然后是Fragment运行

e:启动Fragment01后,再次启动Fragment02

可以看到先是Fragment01先彻底销毁,再次加载Fragment02的

总结:

1:可以看到Fragment是Activity的界面的一部分,当Activity创建后才会有Fragment

2:Fragment的生命周期是受Activity影响的,当Activity停止后,Fragment也会跟着停止

3:当Activity运行之后(OnResume方法调用之后,OnPause方法调用之前),可以单独的操作每个Fragment,比如增加,删除

Android 学习之Fragment生命周期 - 腾讯云开发者社区-腾讯云 (tencent.com)