2016-09-14 3 views
3

Ich versuche, Argumente an eine Fragment übergeben.Android - Bundle savedInstanceState ist Null in Fragment onCreate() und onCreateView()

Auf View ein Fragment klicken, ersetze ich meine Fragment mit anderer und Daten weiter in der nächsten Fragment verwendet werden.

Meine Klickaktion:

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

Aber in meinem Ziel Fragment wird savedInstanceState kommt null zu sein.

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

Ich bin nicht in der Lage herauszufinden, was genau fehlt mir?

Antwort

5

savedInstanceState enthält die gespeicherten Daten in onSaveInstanceState(), die Ihre aufgerufen wird, bevor Activity/Fragment wird durch das OS jämmerlich (zurückzufordern Speicher zum Beispiel, oder aufgrund einer Orientierungsänderung).

Anruf bekommen die Bundle Sie mit setArguments() gespeichert:

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

Auch die empfohlene Praxis ein Fragment mit Argumenten zu instanziiert ist über einen statischen newInstance() Verfahren, etwa wie folgt:

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

Und dann Instanziieren Sie Ihre Fragment wie folgt:

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