Android开发有时候会令人头痛。你不得不为诸如建立fragment这样简单的事情写很多代码。幸运的是java支持一个强大的工具:注释处理器(Annotation Processors)。
Fragment的问题是你不得不设置很多参数,从而让它正常运行。很多android开发新手通常这样写:
01
public class MyFragment extends Fragment
02
{
03
private int id;
04
private String title;
05
06
public static MyFragment newInstance(int id, String title)
07
{
08
MyFragment f = new MyFragment();
09
f.id = id;
10
f.title = title;
11
return f;
12
}
13
14
@Override
15
public View onCreateView(LayoutInflater inflater, ViewGroup container,
16
Bundle savedInstanceState)
17
{
18
Toast.makeText(getActivity(), "Hello " + title.substring(0, 3),
19
Toast.LENGTH_SHORT).show();
20
}
21
}
这样做怎么了?我已经在自己的设备上尝试过了,它很好用?
它的却能工作,但是你有没有试过把你的设备从竖向改为横向?你的app将会因为NullPointerException而崩溃,当你试图访问id或title时。
我的app是正常的,因为我把app设置为竖向。所以我从来没遇到过这个问题。
随便你!Android是一个真正的多任务操作系统。多个app在同一时间运行,同时如果需要内存android系统将会销毁activity(和其中包含的fragment)。可能你在日常的app开发中不会注意这些问题。然而,当你在play store中发布后,你将会注意到你的app崩溃了,但你不知道什么原因。使用你app的用户可能同时间使用多个app,很有可能你的app在后台被销毁了。例如:A 用户打开你的app,MyFragment在屏幕上显示。下一步你的用户按了home键(这是你的app在后台运行),并且打开了其它应用。你的app可能会因为释放内存而被销毁。之后,用户返回你的app,例如通过多任务按钮。所以,Android现在会怎么做?Android会恢复之前的app状态,同时恢复MyFragment,这就是问题所在。Fragment试图访问title,但title是null,因为它不是被永久保存的。
我知道了,所以我需要把它们保存在onSaveInstanceState(Bundle)中?
不是。官方的文档有一些不清楚,但是onSaveInstanceState(Bundle)的使用方法应该跟你用Activity.onSaveInstanceState(Bundle)一样:你使用这个方法保存实例的“临时”状态,例如去处理屏幕的方向(从竖向到横向,反之亦然)。所以说当app在后台被杀掉时fragment的实例状态并不能被保存成持久数据,它的作用是再一次返回前台时恢复数据。它的作用跟Activity.onSaveInstanceState(Bundle)在Activity中的作用相同,它们用于“临时”保存实例状态。然而,持久的参数是通过intent外部数据传输的。
所以我应该在Activity中得Intent保存Fragment的参数?
不需要,Fragment有它自己的机制。有两个方法:Fragment.setArguments(Bundle)和Fragment.getArguments(),你必须通过这两个方法来确保参数被持久保存。这就是我上面提到的痛苦之处。需要有大量的代码这样写。第一,你要创建一个Bundle,然后你需要放入键值对,最后调用Fragment.setArguments()。不幸的是,你的工作还没有结束,你必须通过Fragment.getArguments()来读出Bundle。一些这样的工作:
阅读全文请点击:
http://click.aliyun.com/m/22137/
分享到:
相关推荐
FragmentArgs是一个轻量级的开发包,专门设计用于简化Android中Fragment参数的传递。在Android开发过程中,尤其是在处理Fragment交互时,传递参数是一项常见的任务,但标准的方式往往涉及较多的代码,这使得代码变得...
Android Studio 动态加载 Fragment 和获取实例的方法 Android Studio 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能和工具来帮助开发者快速构建高质量的 Android 应用程序。在 Android 开发中,...
在Android应用开发中,Fragment是Android SDK提供的一种组件,它允许开发者在单个Activity中实现多个可交互的屏幕区域。Fragment的设计使得应用可以更好地适应不同的屏幕尺寸和配置,如手机和平板。本教程将深入讲解...
在Android应用开发中,Fragment是实现界面动态组合和交互的重要组件。然而,当涉及到多个Fragment之间的切换时,可能会遇到一个问题:每次切换时,Fragment的布局可能会被重新实例化,导致用户体验下降,例如丢失...
androidx-fragment-1.1.0.aar
通过以上步骤,你可以为Android中的Fragment创建出丰富多彩的动画切换效果,为用户提供更加生动和交互性的体验。在实际项目中,可以根据需求调整动画细节,如动画持续时间、延迟、缩放比例等,以满足特定的设计要求...
在Android应用开发中,Fragment是Android SDK中的一个重要组件,它被设计用来支持多屏幕适配和复杂的用户界面设计。在Android Studio中,Fragment是应用程序界面的一部分,可以独立于Activity进行部分交互,允许...
在Android应用开发中,Fragment是UI组件的一种,它允许我们构建可重用的模块化界面。Fragment可以在Activity中动态添加、删除或替换,这在设计适应不同屏幕尺寸和配置的应用时非常有用。当我们想要增强用户体验,使...
在Android应用开发中,Activity和Fragment是两个核心组件。Activity作为应用程序的主要入口点,而Fragment则作为可重用的UI块,可以在多个Activity之间切换或组合。然而,在使用Fragment时,有时会出现一个问题:当...
这里的`android:name`属性指定Fragment的全限定类名,`android:id`为Fragment分配一个ID,`android:layout_width`和`android:layout_height`定义Fragment占据的空间大小。 **Fragment的生命周期** 静态加载的...
在Android应用开发中,Activity和Fragment是两个核心组件。Activity作为用户界面的主要承载者,而Fragment则被设计为可重用的UI模块,可以插入到一个或多个Activity中,使得应用能够更好地适应不同屏幕尺寸和配置。...
在Android应用开发中,Fragment是UI组件的重要组成部分,它允许我们构建可动态组合的应用界面,尤其是在平板电脑等大屏幕设备上。本文将深入探讨Fragment的管理以及如何解决Fragment重叠问题。 首先,Fragment是在...
本文实例讲述了Android开发实现Fragment监听返回键事件功能的方法。分享给大家供大家参考,具体如下: 前面的文章Android开发教程之Fragment定义、创建与使用方法详细讲述了Fragment的基本概念与用法。这里再来分析...
在Android开发中,`PopWindow`和`Fragment`是两种常用组件,它们分别用于实现不同的交互效果和界面管理。在本项目中,我们将探讨如何将`PopWindow`与`Fragment`相结合,实现在按钮点击时从左侧弹出下拉菜单,并通过...
"Android在Fragment中实现监听触摸事件" Android在Fragment中实现监听触摸事件是指在Android应用程序中,如何在Fragment中监听触摸事件。Fragment是Android应用程序中的一个组件,它可以在Activity中使用,但是它并...
在Android应用开发中,Fragment是UI组件的一种,用于在大屏幕设备上实现多屏或复合视图。Fragment可以在Activity之间动态地添加、移除或替换,使得应用在不同屏幕尺寸和配置下都能提供良好的用户体验。"Android ...
在Android开发中,DataBinding、ViewPager和Fragment是三个非常重要的组件,它们分别负责数据绑定、页面滑动和模块化视图管理。本教程将深入探讨如何将这些技术结合使用,实现一个高效、灵活的封装解决方案。 **...
在Android应用开发中,Activity和Fragment是两个核心组件。Activity作为应用程序的主要入口点,而Fragment则可以看作是Activity中的可重用模块,它们共同构建了丰富的用户界面。当需要在Activity与Fragment之间进行...