【发布时间】:2017-09-22 15:56:22
【问题描述】:
在我的Activity 中,我开始FragmentTransaction 并将Argument 设置为我的Fragment。
DetailFragment detailFragment = new DetailFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Constants.KEY_PRODUCT, navigate.product);
detailFragment.setArguments(bundle);
在我的 Fragments 类中,我重写了 setArgument 方法并解析了 Serializable 对象:
Product product;
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
product = (Product) args.getSerializable(Constants.KEY_PRODUCT);
}
所有这些都工作正常,但是一旦我在我的onCreateView() 方法中调试,之前设置的产品是null。有人可以向我解释一下吗?这样做的正确方法是什么?
编辑:
按照迈克尔的回答,我最终得到了以下代码:
在Activity:
DetailFragment detailFragment = DetailFragment.newInstance(navigate.product);
在片段中:
public static DetailFragment newInstance(Product product) {
DetailFragment fragment = new DetailFragment();
Bundle args = new Bundle();
args.putSerializable(Constants.KEY_PRODUCT, product);
fragment.setArguments(args);
return fragment;
}
但是当我尝试访问onCreate() 中的getArgument() 时,它会给出null:
if (getArguments() != null) {
product = (Product) getArguments().getSerializable(Constants.KEY_PRODUCT);
}
我的Product 永远不会设置。我错过了什么吗?
【问题讨论】:
标签: android android-fragments serializable