最近、アプリをアクティビティベースのアプリからフラグメントベースのアプリに変換しました。スコア保持アプリで、アクティビティの時は簡単にスコアの保存・復元ができました。ただし、それはフラグメントとして機能していないようです。これが私のコードです:
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
if(t!=null&&flag==1){
savedInstanceState.putInt("time", t.getTimeLeft());
} else {
savedInstanceState.putInt("time", 0);
}
savedInstanceState.putIntArray("score_array", points);
savedInstanceState.putIntArray("position_array", spinnerPosition);
savedInstanceState.putBooleanArray("checked_array", shouldBeChecked);
flag = 0;
Log.d("MyApp", "savingState");
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
Log.d("MyApp", "onActivityCreated");
try {
int timeLeft = savedInstanceState.getInt("time");
points = savedInstanceState.getIntArray("score_array").clone();
spinnerPosition = savedInstanceState.getIntArray("position_array").clone();
shouldBeChecked = savedInstanceState.getBooleanArray("checked_array").clone();
((BaseAdapter) ((ListView)getView().findViewById(R.id.missionList)).getAdapter()).notifyDataSetChanged();
if(timeLeft!=0){
flag=1;
this.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
t = new TimerClass(timeLeft*1000, 1000);
t.setViews((TextView)getView().findViewById(R.id.minuteView), (TextView)getView().findViewById(R.id.tenSecondView), (TextView)getView().findViewById(R.id.secondView), (Button)getView().findViewById(R.id.start_button));
((Button)getView().findViewById(R.id.start_button)).setText(R.string.stop);
t.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
私は、try / catchを使用する場合と使用しないonRestoreInstanceState
場合のアクティビティで、これとまったく同じコードを正常に使用しました。onActivityCreated
問題は、バンドルから何かをプルしようとすると、nullポインタエラーが発生することです。ログに保存状態が表示され、次にonActivityCreatedが表示されますが、onActivityCreatedはonSavedInstanceStateによってバンドルに入れられたものを取得していないようです。を呼び出すすべての行でnullポインタを取得しますsavedInstanceState.getAnything()
。しかし、私の読書から、、、、onCreate
およびonCreateView
すべてonActivityCreated
が同じバンドルを使用しています。コードを他の2つに移動しようとしましたが、うまくいきませんでした。