2016-05-12 9 views
1

2つのフラグメントが互いに通信するようにします。 ProductDisplayFragmentはそのオブジェクトをPaymentFragmentに「送る」。次のコードは、FragmentTransactionを使用してPaymentFragmentにオブジェクトを送信したコードを示しています。FragmentTransactionを使用したフラグメントとの通信

このコードは、FIRSTオブジェクトを送信しようとしたとき以外は機能します。最初のオブジェクトは決して受け取られません。 「paymentFragment.getProduct(product);」を追加しようとすると他のステートメントでは、アプリケーションがクラッシュします。ここで

は私のコードです:ProductDisplayFragment.javaの下

:ProductFragment.java

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

答えて

0

の下

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

は、最初の製品のために、私はちょうどのためgetArgumentsを使用する必要があることが判明しますonCreateViewメソッドを次のようにバンドルします。

// Get first product 
    Bundle arguments = getArguments(); 
    if (arguments != null) { 
     Product product = (Product) arguments.getSerializable(KEY_PRODUCT); 
     getProduct(product); 
    } 
関連する問題