安卓 - 在Fragment的onCreate()和onCreateView()方法中Bundle savedInstanceState为空

3

我试图向一个Fragment传递参数。

点击FragmentView时,我将我的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

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

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

    View rootView = inflater.inflate(R.layout.fragment_order_details, container, false);
    TextView date = (TextView) rootView.findViewById(R.id.order_detail_date);
    date.setText((CharSequence) order.getCreatedOn());
    return rootView;
}

我无法确定我到底缺少了什么?

1个回答

7

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

调用 getArguments() 以获取通过 setArguments() 保存的 Bundle

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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接