我希望两个片段相互通信。 ProductDisplayFragment将“发送”对象到PaymentFragment。以下代码显示了我使用FragmentTransaction将对象发送到PaymentFragment的代码。
除非我尝试发送FIRST对象,否则此代码有效。永远不会收到第一个对象。当我尝试添加“paymentFragment.getProduct(product);”时在else语句中,应用程序将崩溃。
这是我的代码:
在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 :(得分:0)
事实证明,对于第一个产品,我只需要在onCreateView方法中使用getArguments for Bundle,如下所示:
// Get first product
Bundle arguments = getArguments();
if (arguments != null) {
Product product = (Product) arguments.getSerializable(KEY_PRODUCT);
getProduct(product);
}