2016-05-12 4 views
1

Я хочу, чтобы два фрагмента связывались друг с другом. ProductDisplayFragment отправит объект в PaymentFragment. Следующий код показывает код, в котором я использовал FragmentTransaction для отправки объекта в PaymentFragment.Общение с фрагментами с использованием FragmentTransaction

Этот код работает, за исключением случаев, когда я пытаюсь отправить через FIRST объект. Первый объект никогда не принимается. Когда я пытаюсь добавить «paymentFragment.getProduct (продукт)»; в противном случае приложение будет аварийно завершено.

Вот мой код:

Под ProductDisplayFragment.java:

@Override 
    public void onProductSelected(Product product) { 
     PaymentFragment paymentFragment = (PaymentFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_payment_list); 
     if(paymentFragment != null) { 
      paymentFragment.getProduct(product); 
     } else { 
      paymentFragment = new PaymentFragment(); 
      Bundle args = new Bundle(); 
      args.putSerializable(KEY_PRODUCT, product); 
      paymentFragment.setArguments(args); 

      FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
      transaction.replace(R.id.fragment_payment_list, paymentFragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
     } 
    } 

Под ProductFragment.java

public void getProduct(Product product) { 
    // Do something to product item 
} 

ответ

0

Оказывается, что для первого продукта, который я просто должен использовать getArguments для Bundle in onCreateView, как показано ниже:

// Get first product 
    Bundle arguments = getArguments(); 
    if (arguments != null) { 
     Product product = (Product) arguments.getSerializable(KEY_PRODUCT); 
     getProduct(product); 
    } 
Смежные вопросы