我正在尝试将参数传递给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
我无法弄清楚到底错过了什么?
答案 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));