添加项目到Action Bar
你的fragment可以通过实现 onCreateOptionMenu() 提供菜单项给activity的选项菜单(以此类推, Action Bar也一样).为了使这个方法接收调用,无论如何, 你必须在 onCreate() 期间调用 setHasOptionsMenu() 来指出fragment愿意添加item到选项菜单(否则, fragment将接收不到对 onCreateOptionsMenu()的调用).
随后从fragment添加到Option菜单的任何项,都会被追加到现有菜单项的后面.当一个菜单项被选择, fragment也会接收到 对 onOptionsItemSelected() 的回调.也可以在你的fragment layout中通过调用 registerForContextMenu() 注册一个view来提供一个环境菜单.当用户打开环境菜单, fragment接收到一个对 onCreateContextMenu() 的调用.当用户选择一个项目, fragment接收到一个对onContextItemSelected() 的调用.
注意: 尽管你的fragment会接收到它所添加的每一个菜单项被选择后的回调, 但实际上当用户选择一个菜单项时, activity会首先接收到对应的回调.如果activity的on-item-selected回调函数实现并没有处理被选中的项目, 然后事件才会被传递到fragment的回调.
这个规则适用于选项菜单和环境菜单.
处理Fragment生命周期
管理fragment的生命周期, 大多数地方和管理activity生命周期很像.和activity一样, fragment可以处于3种状态:
Resumed
在运行中的activity中fragment可见.
Paused
另一个activity处于前台并拥有焦点, 但是这个fragment所在的activity仍然可见(前台activity局部透明或者没有覆盖整个屏幕).
Stopped
要么是宿主activity已经被停止, 要么是fragment从activity被移除但被添加到后台堆栈中.
停止状态的fragment仍然活着(所有状态和成员信息被系统保持着). 然而, 它对用户不再可见, 并且如果activity被干掉,他也会被干掉.
仍然和activity一样, 你可以使用Bundle保持fragment的状态, 万一activity的进程被干掉,并且当activity被重新创建的时候, 你需要恢复fragment的状态时就可以用到. 你可以在fragment的 onSaveInstanceState() 期间保存状态, 并可以在 onCreate(), onCreateView() 或 onActivityCreated() 期间恢复它.
生命周期方面activity和fragment之间最重要的区别是各自如何在它的后台堆栈中储存. 默认地, activity在停止后, 它会被放到一个由系统管理的用于保存activity的后台堆栈.(因此用户可以使用BACK按键导航回退到它).
然而, 仅当你在一个事务期间移除fragment时,显式调用addToBackStack()请求保存实例时,才被放到一个由宿主activity管理的后台堆栈.
另外, 管理fragment的生命周期和管理activity生命周期非常类似.因此, "managing the activity lifecycle"中的相同实践也同样适用于fragment. 你需要理解的是, activity的生命如何影响fragment的生命.
与activity生命周期的协调工作
fragment所生存的activity的生命周期,直接影响fragment的生命周期,每一个activity的生命周期的回调行为都会引起每一个fragment中类似的回调.
例如,当activity接收到onPause()时,activity中的每一个fragment都会接收到onPause().
Fragment 有一些额外的生命周期回调方法, 那些是处理与activity的唯一的交互,为了执行例如创建和销毁fragment的UI的动作. 这些额外的回调方法是:
-
onAttach()
当fragment被绑定到activity时被调用(Activity会被传入.). -
onCreateView()
创建和fragment关联的view hierarchy时调用. -
onActivityCreated()
当activity的onCreate()方法返回时被调用. -
onDestroyView()
当和fragment关联的view hierarchy正在被移除时调用. -
onDetach()
当fragment从activity解除关联时被调用.
fragment生命周期的流程, 以及宿主activity对它的影响, 在图3中显示.在这个图中,可以看到activity依次的每个状态是如何决定fragment可能接收到的回调方法.例如, 当activity接收到它的onCreate(), activity中的fragment接收到最多是onActivityCreated().
一旦activity到达了resumed状态, 你可以自由地在activity添加和移除fragment.因此,仅当activity处于resumed状态时, fragment的生命周期才可以独立变化.
无论如何, 当activity离开resumed状态,fragment再次被activity的推入它自己的生命周期过程.
相关推荐
这使得Fragment能够自定义其在Action Bar中的表现,增强交互性。 Fragment的引入是Android平台为了应对不同屏幕尺寸和设备类型而作出的重要改进。通过Fragment,开发者可以编写适应多种屏幕配置的代码,使得应用在...
7. **更新UI**:当用户切换Tab时,Fragment生命周期中的`onResume()`方法会被调用,这是更新Fragment内UI的好时机。 注意,描述中提到"太多无法一一验证是否可用",这意味着压缩包中的代码可能并未完全测试过,可能...
Fragment有自己的生命周期,并且可以在Activity中动态添加、移除或替换,这使得在不同屏幕尺寸和配置下创建适应性强的布局成为可能。 在“actionBar01”这个项目中,开发者可能已经创建了一个包含Action Bar的主...
Fragment是Android中的一个可添加到Activity中的模块化组件,它可以有自己的布局和生命周期。通过在Activity中动态地添加、替换或移除Fragments,我们可以创建更加灵活的用户界面。在底部导航栏中,通常会有3到5个...
通过这些示例,你可以学习到Fragment的生命周期管理、与Activity的交互、在ViewPager中的使用以及如何优化内存性能。这些都是Android开发中的关键技能,对于构建用户友好的、功能丰富的应用程序至关重要。
要添加一个Fragment,你需要创建一个新的Fragment类,继承自`androidx.fragment.app.Fragment`,并实现其生命周期方法。例如: ```java public class MyFragment extends Fragment { @Override public View ...
`Fragment`是Android应用开发中的一个重要组件,它代表了应用界面的一部分,可以独立于Activity进行生命周期管理。`Fragment`可以动态添加到Activity中,或者在多个Activity之间重用,这使得应用的设计更加灵活,...
- 当在Fragment中使用Tab选项卡时,确保处理好Activity和Fragment的生命周期,避免内存泄漏和异常。 - Tab选项卡的切换应该伴随着Fragment的保存和恢复状态,以便用户在切换回来时看到他们离开时的状态。 - 使用`...
在Android应用开发中,`Fragment`是用于构建可重用屏幕部分的重要组件,而`MenuItem`则是在Android的`OptionsMenu`或`Action Bar`中显示的用户操作选项。`Fragment Handle MenuItem`涉及到如何在`Fragment`中处理...
`Fragment`是Android中的一个组件,它可以被视为Activity的一部分,有自己的生命周期和UI。`Fragment`允许开发者将应用程序拆分成更小、更可管理的部分,这对于构建复杂的、多面板的应用尤其有用。在一个Activity中...
这些菜单项在运行时会被添加到Action Bar,通常通过重写`onCreateOptionsMenu`和`onOptionsItemSelected`方法来处理菜单的创建和点击事件。 4. **菜单图标**:Action Bar中的图标通常放在`res/drawable`目录下,...
通过`FragmentManager`管理`Fragment`的生命周期和事务,可以实现内容的动态加载和更新。 综合使用这些组件,开发者可以创建一个具有导航侧滑菜单、自定义顶部栏、可切换的标签页以及每个标签页各自承载不同内容的...
ActionBarSherlock通过重写onCreateOptionsMenu和onOptionsItemSelected等生命周期方法,使开发者能够轻松创建和处理Action Bar菜单项。同时,它还支持Overflow Menu,即在屏幕空间有限时,将部分操作移至一个下拉...
学习这个源码示例,开发者可以深入理解Fragment的生命周期、如何在活动中添加和移除Fragment、如何处理Fragment的事务,以及如何在Fragment间传递数据。这对于开发适应多种屏幕尺寸和配置的Android应用来说至关重要...
1. **生命周期**:Fragment有自己的生命周期,与Activity生命周期紧密关联。这使得Fragment可以单独处理创建、暂停、恢复和销毁事件。 2. **Transaction管理**:通过FragmentManager进行Fragment的添加、移除、替换...
2. 考虑使用`FragmentPagerAdapter`或`FragmentStatePagerAdapter`来管理Fragment,它们能处理Fragment的生命周期和内存管理。 3. 为了良好的用户体验,确保Tab标签清晰易读,避免过多的Tab数量。 总结: 在Android...
在学习这些demo时,你需要理解Android的Activity和Fragment生命周期,以及如何在它们之间进行数据传递。同时,掌握Adapter的概念和用法,如PagerAdapter和FragmentPagerAdapter,是实现Tab切换的关键。此外,对...
"android_demo"可能还涵盖了其他Android开发概念,如布局设计(如LinearLayout、RelativeLayout或ConstraintLayout)、数据绑定、事件监听、异步任务处理(如AsyncTask)以及Android的生命周期管理。此外,可能还...
`Fragment`是Android中的可重用组件,可以在Activity的不同生命周期内管理自己的状态。`ViewPager`则允许用户左右滑动来切换不同页面,配合`FragmentPagerAdapter`或`FragmentStatePagerAdapter`,可以轻松地将多个...
通过研究这些源码,学生不仅可以学习到如何使用SearchManager实现浮动搜索框,还能了解到Android Intent、Activity生命周期、UI组件的使用等基础知识,对于提升Android开发技能非常有帮助。 总结,这个毕业设计项目...