Android - Bundle savedInstanceState在Fragment onCreate()和onCreateView()中为null

时间:2016-09-14 06:04:03

标签: android android-fragments

我正在尝试将参数传递给Fragment

点击View的{​​{1}}后,我将Fragment替换为另一个,并将要使用的数据传递到下一个Fragment

我的点击操作:

Fragment

但在我的目的地public void onClick(View view) { Bundle args = new Bundle(); args.putSerializable("order", orders.get(position)); OrderDetailFragment orderDetailFragment = new OrderDetailFragment(); orderDetailFragment.setArguments(args); FragmentManager fragmentManager = ((AppCompatActivity) context).getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.order_activity_content_frame, orderDetailFragment) .addToBackStack("orderDetails") .commit(); } Fragment将成为savedInstanceState

null

我无法弄清楚到底错过了什么?

1 个答案:

答案 0 :(得分:5)

savedInstanceState包含保存在onSaveInstanceState()中的数据,在Activity / Fragment被操作系统杀死之前调用该数据(例如,回收内存,或者因为方向改变)。

致电getArguments()以获取Bundle保存的setArguments()

order = (Order) getArguments().getSerializable("order");

此外,建议使用参数实例化Fragment的做法是通过静态newInstance()方法,如下所示:

public static OrderDetailFragment newInstance(Order order) {
    Bundle args = new Bundle();
    args.putSerializable(KEY_ORDER, order);
    OrderDetailFragment fragment = new OrderDetailFragment();
    fragment.setArguments(args);
    return fragment;
}

然后你像这样实例化Fragment

OrderDetailFragment orderDetailFragment = OrderDetailFragment
    .newInstance(orders.get(position));