[Android]fragmentでgetArgumentsが空の理由と解決
fragmentがActivityと通信するとき、私たちはよくactivityにArgumentをセットしてからfragmentでgetArgumentの方法でactivityがfragmentに伝えたいデータを取得しますが、私は今日この方法で空のポインタが異常になったことを報告して、私に多くの時間を遅らせました.次に、空のポインタが発生した原因と解決方法を皆さんと共有します.
理由:
これはgetArgumentのソースコードです.上の注釈は、fragmentがインスタンス化されていないこと、すなわちactivityにバインドされていないことを前提としています.問題はここにあります.fragmentを使用するときにxmlを使用して直接fragmentをバインドする場合があります.activityがonCreatメソッドを実行するときにfragmentはインスタンス化されており、以下のコードシートを実行しても、バインドされたfragmentはbundleを取得できません.
解決方法:
getArgumentの方法が使えない以上、遠回りして使いましょう.
Activityを利用して直接bundleを入手すれば問題解決できます~
理由:
/**
* 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を入手すれば問題解決できます~