activity嵌套fragment 并 启动activity

Posted wanglongjiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了activity嵌套fragment 并 启动activity相关的知识,希望对你有一定的参考价值。

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)

activity 嵌套一级fragment,一级fragment嵌套二级fragment,在一级fragment中刷新二级fragment中的UI

今天遇到挺纠结的问题,由于产品设计的问题,技术上涉及到activity 嵌套一级fragment,一级fragment嵌套二级fragment,在一级fragment中刷新二级fragment中的UI。

其中一级fragment中有顶部搜索栏,搜索栏下面有viewpager+fragment的布局,搜索栏输入内容后要更新子当前页面的fragment的搜索方法,并刷新UI.

adapter:

private class OrderManagerFragmentPagerAdapter extends FragmentPagerAdapter {
        public OrderManagerFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }


        @Override public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return NewOrderFragment.newInstance();
                case 1:
                    return FollowingFragment.newInstance();
                case 2:
                    return DesperatelyFollowingFragment.newInstance();
                case 3:
                    return RobbedFragment.newInstance();
                case 4:
                    return TransferFragment.newInstance();
                case 5:
                    return ClinchDealFragment.newInstance();
                case 6:
                    return LostFragment.newInstance();
                case 7:
                    return NoEffectFragment.newInstance();
                default:
                    return null;
            }
        }


        @Override public CharSequence getPageTitle(int position) {
            return TITLES[position % TITLES.length];
        }


        @Override public int getCount() {
            return TITLES.length;
        }
    }

 

  调用adapter的getitem()并调用子当前页面的fragment的搜索方法,并刷新UI,但是出错,子fragment中UI组件为null,adapter为null;

  正确调用姿势为:

 int    position   = pager.getCurrentItem();
        String searchWord = searchtv.getSearchWord();
        //两层fragment嵌套,调用指定fragment的刷新操作,fuck,这方法找了好几天
        Fragment fragment = getChildFragmentManager().getFragments().get(position);

 

  获取当前显示的子fragment,然后调用子fragment的搜索方法,并刷新UI.,完美实现。

 

以上是关于activity嵌套fragment 并 启动activity的主要内容,如果未能解决你的问题,请参考以下文章

[Android Studio]如何从Fragment中嵌套的Recycleview启动一个Activity?

Activity嵌套Fragment 控制返回键

是否最好使用 Activity.onAttachFragment 或 Fragment.onAttach 在 Activity 和嵌套片段之间进行通信?

Activity嵌套多个Fragment实现横竖屏切换

Android Fragment 开发框架合集

Fragment使用