2つのフラグメントが相互に通信するようにします。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
}
最初の製品では、以下に示すように、onCreateViewメソッドでバンドルのgetArgumentsを使用する必要があることがわかりました。
// Get first product
Bundle arguments = getArguments();
if (arguments != null) {
Product product = (Product) arguments.getSerializable(KEY_PRODUCT);
getProduct(product);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加