浅谈android Fragment横竖屏翻转对重新加载的要求
有时候,我们在同一个activity里面有很多fragment,在横竖屏的时候,有些fragment要求重新加载数据,有些不需要,如何简单控制这些需求,本人分享一点小经验,欢迎大家指正里面的错误。 大家都知道横竖屏翻转的时候,activity会重启,fragment也会重新加载,如果现在要求在横竖屏翻转的时候,同一个activity中,一个fragment要重新加载,一个不要重新加载,那该怎么办呢? 如果在activity里面继承了onConfigurationChanged这个方法之后,这个activity和里面的fragment是不会重新加载的,也就是说显示的数据和UI不会改变,只是将竖屏 在Android应用开发中,Fragment是Activity的一个模块化组件,它可以在Activity中承载多个视图,提供了灵活的界面设计。然而,当设备从横屏切换到竖屏或反之,Android系统默认会销毁并重新创建Activity以及其中的Fragment,这可能导致数据丢失或者不必要的重新加载。本文将探讨如何在横竖屏翻转时,对Fragment进行精细化管理,以满足不同Fragment在翻转时不重新加载或重新加载数据的需求。 理解Android系统在横竖屏切换时的行为。当设备的配置(如屏幕方向)发生改变时,系统会默认销毁当前运行的Activity,并重建一个新的实例来适应新的配置。这个过程中,所有与Activity关联的Fragment也会被销毁和重新创建。为了防止这种行为,开发者通常会在AndroidManifest.xml中为Activity设置`android:configChanges="orientation|screenSize"`,然后在Activity中覆写`onConfigurationChanged`方法。这样做可以避免Activity和Fragment因配置改变而被系统销毁,但同时也意味着开发者需要手动处理配置变化带来的界面更新。 在`onConfigurationChanged`方法中,可以通过`FragmentManager`和`FragmentTransaction`来控制Fragment的行为。例如,如果希望FragmentOne在横竖屏切换时保持原有状态,而FragmentTwo需要重新加载数据,可以如下操作: ```java @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); FragmentManager fragmentManager = getFragmentManager(); // 检查当前显示的是FragmentOne Fragment oldFragment = fragmentManager.findFragmentByTag("FragmentOne"); if (oldFragment instanceof FragmentOne) { // 不需要处理FragmentOne,因为希望它保持原状 } else { // 这里处理FragmentTwo,因为它需要重新加载 Fragment newFragment = new FragmentTwo(); FragmentTransaction trans = fragmentManager.beginTransaction(); // 移除旧的FragmentTwo trans.remove(oldFragment); // 添加新的FragmentTwo trans.add(R.id.fragments_container, newFragment, "FragmentTwo"); trans.commit(); } } ``` 在上述代码中,`findFragmentByTag`用于获取当前显示的Fragment,然后根据需要决定是否移除并替换。这样,FragmentTwo在横竖屏切换时会被重新加载,而FragmentOne则保持不变。 当然,还可以根据业务逻辑,在`onCreateView`或`onActivityCreated`等生命周期方法中,针对每个Fragment判断当前的屏幕方向,从而决定是否加载数据。例如,对于需要重新加载的Fragment,可以检查`newConfig.orientation`,如果是横屏或竖屏,分别执行相应的加载操作。 此外,若希望Fragment在特定情况下重新加载数据,可以维护一个布尔标志变量,比如`shouldReloadData`,并在`onConfigurationChanged`中检查这个标志。如果标志为真,则在Fragment中调用相应的方法重新加载数据。 通过覆写`onConfigurationChanged`,结合`FragmentManager`和`FragmentTransaction`,可以精确控制Fragment在横竖屏翻转时的行为。开发者可以根据具体需求选择销毁并重建Fragment,或者仅在需要时才更新数据,以此提高用户体验并优化性能。同时,确保对每个Fragment的生命周期方法有深入理解,以便在合适的时间点执行正确的操作,是实现这一目标的关键。
- 粉丝: 5
- 资源: 985
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot和Vue的后台管理系统.zip
- 用于将 Power BI 嵌入到您的应用中的 JavaScript 库 查看文档网站和 Wiki 了解更多信息 .zip
- (源码)基于Arduino、Python和Web技术的太阳能监控数据管理系统.zip
- (源码)基于Arduino的CAN总线传感器与执行器通信系统.zip
- (源码)基于C++的智能电力系统通信协议实现.zip
- 用于 Java 的 JSON-RPC.zip
- 用 JavaScript 重新实现计算机科学.zip
- (源码)基于PythonOpenCVYOLOv5DeepSort的猕猴桃自动计数系统.zip
- 用 JavaScript 编写的贪吃蛇游戏 .zip
- (源码)基于ASP.NET Core的美术课程管理系统.zip