2016-09-14 15 views
3

Fragmentに引数を渡そうとしています。Android - savedInstanceStateのバンドルがフラグメントonCreate()およびonCreateView()でnullです。

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で、savedInstanceStatenullように来ています。

@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; 
} 

私は正確に何が欠けているのか分かりませんか?

答えて

5

savedInstanceStateがあなたのActivity/FragmentはOSによって殺される前に呼び出されonSaveInstanceState()に保存されたデータを、含まれている(例えば、または理由の向きの変更のメモリを再利用します)。

コール BundleあなたはsetArguments()とともに保存を取得する:

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

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

また、引数を指定してFragmentをインスタンス化することをお勧めは、このような何か、静的newInstance()メソッドを介してです

次に、Fragmentをこのようにインスタンス化します。

OrderDetailFragment orderDetailFragment = OrderDetailFragment 
    .newInstance(orders.get(position)); 
関連する問題