私のActivity
の中で私はFragmentTransaction
を開始し、Argument
をFragment
に設定します。私は私のonCreateView()
メソッド内でデバッグしていますように、とすぐにonCreateViewのフラグメントヌルの引数
Product product;
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
product = (Product) args.getSerializable(Constants.KEY_PRODUCT);
}
このすべてが正常に動作している、しかし:私のFragment
のクラスの中で
DetailFragment detailFragment = new DetailFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(Constants.KEY_PRODUCT, navigate.product);
detailFragment.setArguments(bundle);
私はsetArgumentメソッドをオーバーライドしてSerializable
オブジェクトを解析します以前に設定された製品はnull
です。誰かが私にこれを説明することはできますか?これを行う正しい方法は何ですか? Activity
で :
DetailFragment detailFragment = DetailFragment.newInstance(navigate.product);
とフラグメント中:
public static DetailFragment newInstance(Product product) {
DetailFragment fragment = new DetailFragment();
Bundle args = new Bundle();
args.putSerializable(Constants.KEY_PRODUCT, product);
fragment.setArguments(args);
return fragment;
}
私は次のコードの断片になってしまったマイケルによって解答後
:
EDIT
しかし、のgetArgument()
にアクセスしようとするとtはnull
を与える:
if (getArguments() != null) {
product = (Product) getArguments().getSerializable(Constants.KEY_PRODUCT);
}
と私のProduct
が設定されることはありませんが。私は別のことを忘れましたか?
なぜ 'product'は' setArguments() 'で初期化されたときに' null'になっていますか? – azizbekian
@azizbekian 'Fragment'が' FragmentManager'にまだ追加されていないので、 'null'が出ています。' FragmentManager'は、状態を持つフラグメントを削除して再作成できます。 'setArguments()'の 'product'を設定するコンストラクタは、コンストラクタを使うことと変わりませんが、' Bundle'には 'getArguments()'が返す 'product'があります。 – Kostyantin2216
@ Kostyantin2216、私はget/set引数のポイントを得る。私が答えることができなかった問題は、まだそのシステムによって破壊されていなかったので、そのフラグメントが「無効」になっている理由です。これがシナリオで、システムがプロセスを殺してユーザーが戻ってきたら、 'product'フィールドはnullにする必要がありますが、そうでなければ' Bundle'がどこにどこにあるのか(ソースでさえも)ヌルになった。 – azizbekian