この質問はよくあることですが、私は非常に多くの回答を読んでいますが、私の問題にはまったく当てはまりません。私のアプリケーションでは、私にはアクティビティがあり、rhyeのアクティビティでは、フラグメントをロードします。私はまた断片にいくつかのデータを(Bundleの形で)送る。だから私の問題は、画面が回転したときに、フラグメントをonSaveInstanceState
に保存します。アクティビティのメソッドとチェックインonCreateメソッドweather savedInstanceがnullであるかどうか、そしてその基準でフラグメントをロードします。 アクティビティコード:画面上のカスタムオブジェクトをフラグメントまたはアクティビティに保存する
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putParcelable(Const.TAG_REQ_CUSTOM,DetailsItems);
outState.putString(Const.TAG_FLOW, Const.TAG_MAIN_FLOW);
getSupportFragmentManager().putFragment(outState,"current_fragment",fragment);
}
のonCreateメソッド:
if (findViewById(R.id.fragment_frame) != null) {
if (savedInstanceState != null) {
// this invoke when screen rotate but the app crash
DetailsItems = savedInstanceState.getParcelable(Const.TAG_REQ_CUSTOM);
String flow = savedInstanceState.getString(Const.TAG_FLOW);
ft = getSupportFragmentManager().getFragment(savedInstanceState,"current_fragment");
mFragmentManager=getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
bundle= new Bundle();
bundle.putString(Const.TAG_FLOW, flow);
bundle.putParcelable(Const.TAG_REQ_BOOKING_DETAILS, bookingDetailsItems);
ft.setArguments(bundle);
mFragmentTransaction.replace(R.id.fragment_frame, ft).commit();
}else{
// load fragment on first time
}
}
だから私の質問です:どこで(親アクティビティまたはフラグメントで)カスタムオブジェクトを保存する必要がありますか? 私の保存されたインスタンスは、アプリのcrasheshおよびログよりもnullではないです。
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
これはオブジェクトが 'Parcelable'インターフェースを実装しているのに対し、OPは任意のオブジェクトを保存/復元する方法を尋ねていると仮定しています。 – azizbekian