为什么使用Fragment Arguments

本文探讨了在Android开发中,使用方法二传递Fragment参数的原因,以及如何在Fragment被重建时保持参数不丢失。通过静态方法newInstance实现参数传递,并利用onSaveInstanceState与onCreate(Bundle)方法确保参数安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:

String content;
public SecondFragment(String content) {
    this.content = content;
}

方法二:

public static SecondFragment newInstance(String content) {
    Bundle args = new Bundle();
    args.putString("content", content);
    SecondFragment fragment = new SecondFragment();
    fragment.setArguments(args);
    return fragment;
}

往往我们在做Activity向Fragment传递参数时会用方法二,而不会用方法一。这里有以下几个原因,最主要的原因是当系统重建fragment时,所有在类中声明的变量都会丢失。所以如果你使用方法一,当遇到用户改变系统配置或你的app后台后被系统回收而导致fragment重建,则content内容丢失。而在使用argument方法时,则内容不会丢失,在fragment重建后,通过getArguments可以找回。

当然也有童鞋说我可以使用onSaveInstanceState的方法来在fragment被重建前先保存内容,然后在onCreate(Bundle)时重新赋值。这个方法也是可行的。但这种方法既不容易控制而且也增加了复杂性,比如以后你想多增加一个参数,还需要记得在onSaveInstanceState方法中添加一条。

咱们之所以使用第二种方法,还有另外一些原因,一方面它维持了fragment的封装性,因为静态方法不包含指向外围类的引用。另一方面根据《Effective Java》第二版中第一条所说:考虑用静态方法代替构造器有诸多好处。

  1. 它们有名称
  2. 不必在每次调用时创建一个新对象
  3. 可以返回原类型的任何子类型的对象
  4. 在创建参数化类型实例的时候,它们使得代码变得更加简洁

更多具体内容请参考《Effective java》

注:没有任何方法阻止内存不足时被系统回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值