【发布时间】:2016-09-14 09:30:57
【问题描述】:
我知道将参数传递给 Fragments 的推荐方法是使用静态方法并创建一个包并在 Fragment 上调用 setArguments()/getArguments():
public static MyFragment newInstance(int arg1, int arg2) {
Bundle b = new Bundle();
b.putInt("key1", arg1);
b.putInt("key2", arg2);
MyFragment frag = new MyFragment();
frag.setArguments(b);
}
public View onCreateView(....) {
Bundle b = getArguments();
memberVar1 = b.getInt("key1");
memberVar2 = b.getInt("key2");
.....
}
如果我错了,请纠正我,但似乎以下方法也有效,不需要稍后调用 getArguments():
@Override
public void setArguments(Bundle args) {
memberVar1 = args.getInt("key1");
memberVar2 = args.getInt("key2");
}
这是基于在 Fragment 类中实现 setArguments() 的方式。如果这允许在 Fragment 重新创建时访问 mArguments,那么不应该同样适用于 setArguments() 调用中设置的其他变量吗?
659 public void setArguments(Bundle args) {
660 if (mIndex >= 0) {
661 throw new IllegalStateException("Fragment already active");
662 }
663 mArguments = args;
664 }
除了惯例之外,这两种情况是否比另一种有优势?
【问题讨论】: