【问题标题】:Passing data to fragment via Bundle OR a public method defined inside fragment通过 Bundle 或在片段中定义的公共方法将数据传递给片段
【发布时间】:2016-05-03 12:54:13
【问题描述】:
谁能说出以下将数据共享到片段的方法之间的区别。
-
使用捆绑包。
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
-
使用片段内部定义的公共方法。
MyFragment fragment = new MyFragment();
fragment.setData("param");
public void setData(String param1) {
this.param1 = param1;
}
【问题讨论】:
标签:
java
android
android-activity
fragment
【解决方案1】:
Bundle 是框架内置并支持的。如果 Fragment 由于生命周期而被框架自动拆除并重新创建,您仍然会得到 Bundle。
在第二种情况下,如果 Fragment 被拆除并重新创建,则框架不会自动重新创建私有数据成员 param1。这与您不使用带有 Fragment 的重载构造函数的原因相同。
【解决方案2】:
如果您想向fragment 提供数据,但想在fragment 中决定何时使用此数据,请使用Bundle。
如果您想将数据传递给已经处于活动状态的fragment 并期望来自fragment 的即时反应,请使用方法调用。
【解决方案3】:
您还需要有一个要从中访问数据的类的实例。
这可能会导致内存泄漏
如果您经常使用公共方法而不是 bundle ,
通过bundle,您可以通过android消息机制共享数据而无需任何引用