Fragment 是 Android 开发中的一个重要概念,它代表一个行为或用户界面片段,可以在 Activity 内部嵌入,并且可以在多个 Activity 中重用。...后退栈管理:当执行 Fragment 事务时,可以将其添加到后退栈中,这样用户按下后退键时,可以按照 LIFO(后进先出)的顺序撤销之前的操作。...查找 Fragment:可以通过 findFragmentById() 或 findFragmentByTag() 方法查找已添加的 Fragment 实例。...FragmentManager fragmentManager = getSupportFragmentManager(); // 如果在AndroidX中使用// 或// FragmentManager...= null) { for (Fragment fragment : fragments) { fragmentTransaction.remove(fragment); }}
例如,当 Activity 暂停时,Activity 的所有片段也会暂停;当 Activity 被销毁时,所有片段也会被销毁。...不过,当 Activity 正在运行(处于已恢复生命周期状态)时,可以独立操纵每个片段,如添加或移除片段。...当执行此类片段事务时,也可将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。借助返回栈,用户可以通过按返回按钮撤消片段事务(后退)。...onCreateView() 系统会在片段首次绘制其界面时调用此方法。如要为片段绘制界面,从此方法中返回的 View 必须是片段布局的根视图。如果片段未提供界面,可以返回 null。...但请注意,只有在该片段附加到 Activity 时才需调用 getContext()。如果尚未附加该片段,或者其在生命周期结束期间已分离,则 getContext() 返回 null。
通过getChildFragmentManager()能够获得管理子Fragment的FragmentManager,在子Fragment中可以通过getParentFragment()获得父Fragment...().findFragmentByTag("f1")从FragmentManager中查找Fragment对象。...onDetach():当Fragment和Activity解除关联时调用。 上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。...这里补充一个点,getSupportFragmentManager().findFragmentByTag()是经常用到的方法,他是FragmentManager的方法,FragmentManager是抽象类...} return null; } } 从上面看到,先从mAdded中查找是否有该Fragment,如果没找到,再从mActive中查找是否有该Fragment。
resetTab(); switch (i) { case 0: IndexFragment=manager.findFragmentByTag...R.color.tab_select_back)); break; case 1: MagFragment=manager.findFragmentByTag...R.color.tab_select_back)); break; case 3: MeFragment=manager.findFragmentByTag...addFragment(home_F); showFragment(home_F); } else { showFragment(home_F); } // 设置默认首页为点击时的图片...返回按钮的监听 */ @Override public void onBackPressed() { Toast.makeText(this, "点击返回按钮", Toast.LENGTH_SHORT
例如,用户可以点按设备的返回按钮,或者 Activity 可能需要启动不同的 Activity。...- 任务 任务是用户在执行某项工作时与之互动的一系列 Activity 的集合。 - 片段 Fragment 表示 FragmentActivity 中的行为或界面的一部分。...“子 Activity”)。...与 Activity 生命周期协调一致 片段所在 Activity 的生命周期会直接影响片段的生命周期,其表现为,Activity 的每次生命周期回调都会引发每个片段的类似回调。...o 与 Activity 通信 片段可通过 getActivity() 访问 FragmentActivity 实例,并轻松执行在 Activity 布局中查找视图等任务 View listView
if (bundle == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container,...().findFragmentByTag("f1")从FragmentManager中查找Fragment对象。...这里补充一个点 getSupportFragmentManager().findFragmentByTag()是经常用到的方法,他是FragmentManager的方法,FragmentManager是抽象类...} return null; } } 从上面看到,先从mAdded中查找是否有该Fragment,如果没找到,再从mActive中查找是否有该Fragment。...懒加载主要依赖Fragment的setUserVisibleHint(boolean isVisible)方法,当Fragment变为可见时,会调用setUserVisibleHint(true);当Fragment
通过将 Activity 布局分成片段,您可以在运行时修改 Activity 的外观,并在由 Activity 管理的返回栈中保留这些更改。...不过,在手机尺寸的屏幕上,没有足以储存两个片段的空间,因此Activity A 只包括用于显示文章列表的片段,当用户选择文章时,它会启动Activity B,其中包括用于阅读文章的第二个片段。...:自定义一个Fragment类,需要继承Fragment或者他的子类,重写onCreateView()方法 在该方法中调用:inflater.inflate()方法加载Fragment的布局文件,接着返回加载的...findFragmentByTag()、findFragmentById() } /** * 重写onStart()方法, * 因为从fragment的生命周期可以知道当...是异步处理的,所以获取fragment时要注意】 可通过以下两种方法获取fragment:findFragmentByTag()、findFragmentById() Fragment中的组件 /
,变成透明的了,写@null也行 android:listSelector="@android:color/transparent"//分割条透明 android:divider...(); LeftMenuFragment fragment = (LeftMenuFragment) fm .findFragmentByTag(FRAGMENT_LEFT_MENU); return...fragment; } // 获取主页面fragment public ContentFragment getContentFragment() { FragmentManager fm = getSupportFragmentManager...(); ContentFragment fragment = (ContentFragment) fm .findFragmentByTag(FRAGMENT_CONTENT); return...); TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);//下面可以这样写,不过前提是让getItem方法返回NewsMenuData
onCreateView():创建该Fragment对应的视图,在这里你必须将创建的视图返回诶调用者。...解决方法: 1.在进入onCreate函数时,先去判断savedInstanceState是否为null,如果不为null,则表示里面有保存这个fragment。...= null) { fg1 = (AllOfficialAccountFragment) fManager.findFragmentByTag("fg1"); fg2...) fManager.findFragmentByTag("fg3"); fg4 = (OtherOfficialAccountFragment) fManager.findFragmentByTag...= null) { // “内存重启”时调用 List fragmentList = getSupportFragmentManager().getFragments
中执行observe时 @MainThread public void observe(@NonNull LifecycleOwner owner, @NonNull Observer...; return; } activeStateChanged(shouldBeActive()); } 当执行...holder); return holder; } 首先是findHolderFragment(fm),在activity的supportFragmentManager中查找...同时返回我们的ViewModel....viewmodel是同一个,那么fragment中viewmodel数据自然能共享 四.viewModel实现数据保存 主要是横屏竖屏下,activity会重启,数据会重新获取,使用viewModel时,
--根据name在Activity的FragmentManager中查找缓存Fragment--> Fragment fragment = mFragmentManager.findFragmentByTag...(name);查找是否已经有Fragment缓存,第二次设置Adapter的时候,由于部分Fragment已经被添加到FragmentManager的缓存中去了,新的Adapter仍然能通过mFragmentManager.findFragmentByTag...FragmentManager对于Fragment的操作是分批量进行的,在一个Transaction中有多个add、remove、attach操作,Android是有返回键的,为了支持点击返回键恢复上一个场景的操作...对于每个入栈的Transaction,都是需要出栈的,而且每个操作都有前后文,比如进入与退出的动画,当需要翻转这个操作,也就是点击返回键的时候,需要知道如何翻转,也就是需要记录当前场景,对于remove...public Fragment findFragmentByTag(String tag) { if (mAdded != null && tag !
正文: 1.Fragment的添加 我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。如果我现在问你,Activity要显示一个按钮Button,你会怎么做? 1....”,那你说"子Activity"中能否再添加Fragment,答案当然是可以。...name = makeFragmentName(container.getId(), itemId); Fragment fragment = this.mFragmentManager.findFragmentByTag...原因:我们可以知道Activity重新创建时,会重新构建它所管理的Fragment,原先的Fragment的字段值将会全部丢失(因为当切换横竖屏时,Fragment会调用自己的无参构造函数,那么在构造函数传参就会失效...我们的目标:FragmentA 启动FragmentB ,然后FragmentB做完事情,返回结果给FragmentA FragmentB.setTargetFragment(FragmentA);
FrameLayout是一个布局,称为“帧布局”,,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,而这种布局方式却没有任何的定位方式,所以它应用的场景并不多;帧布局的大小由控件中最大的子控件决定...,如果控件的大小一样大的话,那么同一时刻就只能看到最上面的那个组件!...onActivityCreated方法:当Activity中的onCreate方法执行完后调用。 onstart方法: 与Activity一样,Fragment开始可见但不可交互的时候调用。...onResume方法:与Activity一样,是当该Fragment与用户能进行交互时被执行,用户可以获得Fragment的焦点,能够与用户交互。 按下home键之后 ?...时指定的。
默认情况下,按下返回键的时候的操作是从回退栈中弹出一个事务。 按下返回键的时候,是从返回栈中弹出一个事务(Fragment)。...Fragment 的布局只是附着在 FrameLayout 上,作为 FrameLayout 的 子 View ,并没有取代 FrameLayout <FrameLayout android...R.id.fl, new FragmentTwo()) .addToBackStack(null) .commit(); 这个时候按下返回键的结果是,从回退栈中弹出这个事务...Activity 中有 Fragment 的引用,可以直接操作 Fragment 中的方法 每个 Fragment 都有一个唯一的 TAG或者 ID 可以通过 getFragmentManager.findFragmentByTag...按下返回键后,恢复 FragmentOne 和 FragmentTwo 从 onCreateView 开始 如果没有 .addToBackStack(null) 的话,那么 FragmentOne
我们知道Fragment是一个"碎片(或者片段)",添加在Activity中。如果我现在问你,Activity要显示一个按钮Button,你会怎么做? 1....”,那你说"子Activity"中能否再添加Fragment,答案当然是可以。...name = makeFragmentName(container.getId(), itemId); Fragment fragment = this.mFragmentManager.findFragmentByTag...原因:我们可以知道Activity重新创建时,会重新构建它所管理的Fragment,原先的Fragment的字段值将会全部丢失(因为当切换横竖屏时,Fragment会调用自己的无参构造函数,那么在构造函数传参就会失效...我们的目标:FragmentA 启动FragmentB ,然后FragmentB做完事情,返回结果给FragmentA FragmentB.setTargetFragment(FragmentA);
一、思考 当Activity A启动一个Activity B后,B finish,我们可能需要处理B返回的值,此时,我们可能就需要用到了onActivityResult,需要在Activity A中重写实现...commitNowAllowingStateLoss(); // need quickly return holder; } (2)可能会已经存在有一个空壳Fragment,所以需要加一个查找的逻辑..."Can't access FragmentManager from onDestroy"); } Fragment fragmentByTag = manager.findFragmentByTag...= null && !...在以上实现的基础上,在ListenActivityResultRequest增加一个返回Observable的方法。
().findFragmentByTag("f1")从FragmentManager中查找Fragment对象。...当F1在Activity的onCreate()中被添加时,日志如下: ?...先看第一层含义,getSupportFragmentManager.beginTransaction()返回的就是BackStackRecord对象,代码如下: ?...这里补充一个点,getSupportFragmentManager().findFragmentByTag()是经常用到的方法,他是FragmentManager的方法,FragmentManager是抽象类...从上面看到,先从mAdded中查找是否有该Fragment,如果没找到,再从mActive中查找是否有该Fragment。
,又称作Activity片段。...onResume():当Fragment可见且可交互时调用 onPause():当Fragment不可交互但可见时调用。 onStop():当Fragment不可见时调用。...销毁状态:当活动被销毁,相关联碎片进入销毁状态。...Fragment和Activity完整的生命周期如上图所示 当Fragment在Activity的onCreate()中被添加时 Activity super.onCreate执行完毕 Fragment...Fragment的public方法 如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag
onCreateView() 当第一次绘制Fragment的UI时系统调用这个方法,必须返回一个View,如果Fragment不提供UI也可以返回null。 ...onPause() 当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。...当系统创建这个Activity的布局文件时,系统会实例化每一个fragment,并且调用它们的onCreateView()方法,来获得相应fragment的布局,并将返回值插入fragment标签所在的地方...(attached to an activity),否则将会返回一个null。 ...onCreateView() 当创建fragment的UI被初始化时调用。 onActivityCreated() 当activity的onCreate()方法返回时调用。
领取专属 10元无门槛券
手把手带您无忧上云