[Android]fragmentでgetArgumentsが空の理由と解決


fragmentがActivityと通信するとき、私たちはよくactivityにArgumentをセットしてからfragmentでgetArgumentの方法でactivityがfragmentに伝えたいデータを取得しますが、私は今日この方法で空のポインタが異常になったことを報告して、私に多くの時間を遅らせました.次に、空のポインタが発生した原因と解決方法を皆さんと共有します.
理由:
 /**
     * Return the arguments supplied when the fragment was instantiated,
     * if any.
     */
    final public Bundle getArguments() {
        return mArguments;
    }

これはgetArgumentのソースコードです.上の注釈は、fragmentがインスタンス化されていないこと、すなわちactivityにバインドされていないことを前提としています.問題はここにあります.fragmentを使用するときにxmlを使用して直接fragmentをバインドする場合があります.activityがonCreatメソッドを実行するときにfragmentはインスタンス化されており、以下のコードシートを実行しても、バインドされたfragmentはbundleを取得できません.
Fragment unlawLeft = new MineUnLawLeftFgm();
 Bundle bundle = new Bundle();
                bundle.putSerializable("userToFgm",user);
                unlawLeft.setArguments(bundle);
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                //      fragment
                fragmentTransaction.replace(R.id.fgmUnlawContainer,unlawLeft);
                //    
                fragmentTransaction.commit();

解決方法:
getArgumentの方法が使えない以上、遠回りして使いましょう.
user = (User) getActivity().getIntent().getSerializableExtra("users");

Activityを利用して直接bundleを入手すれば問題解決できます~