Java 使用FragmentTransaction与片段通信

Java 使用FragmentTransaction与片段通信,java,android,android-fragments,Java,Android,Android Fragments,我想要两个片段互相交流。ProductDisplayFragment将对象“发送”到PaymentFragment。下面的代码显示了我使用FragmentTransaction将对象发送到PaymentFragment的代码 这段代码在我尝试发送第一个对象时除外。第一个对象永远不会被接收。当我试图在else语句中添加“paymentFragment.getProduct(product);”时,应用程序将崩溃 这是我的密码: 在ProductDisplayFragment.java下: @Ove

我想要两个片段互相交流。ProductDisplayFragment将对象“发送”到PaymentFragment。下面的代码显示了我使用FragmentTransaction将对象发送到PaymentFragment的代码

这段代码在我尝试发送第一个对象时除外。第一个对象永远不会被接收。当我试图在else语句中添加“paymentFragment.getProduct(product);”时,应用程序将崩溃

这是我的密码:

在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
}

事实证明,对于第一个产品,我只需在onCreateView方法中使用Bundle的getArguments,如下所示:

    // Get first product
    Bundle arguments = getArguments();
    if (arguments != null) {
        Product product = (Product) arguments.getSerializable(KEY_PRODUCT);
        getProduct(product);
    }

事实证明,对于第一个产品,我只需在onCreateView方法中使用Bundle的getArguments,如下所示:

    // Get first product
    Bundle arguments = getArguments();
    if (arguments != null) {
        Product product = (Product) arguments.getSerializable(KEY_PRODUCT);
        getProduct(product);
    }