アクティビティ状態の保存と復元を知っています。しかし、私がしたいのは、ビューの状態を保存および復元することです。カスタムビューと2つのオーバーライドされたメソッドがあります。
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (state instanceof Bundle) {
Bundle bundle = (Bundle) state;
currentLeftX = bundle.getInt(CURRENT_LEFT_X_PARAM, 0);
currentTopY = bundle.getInt(CURRENT_TOP_Y_PARAM, 0);
}
super.onRestoreInstanceState(state);
}
@Override
protected Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX);
bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY);
return bundle;
}
私はこれがシームレスに動作することを期待していましたが、エラーが発生しました:
原因:Java.lang.IllegalArgumentException:誤った状態クラス、View Stateを予期していましたが、代わりにクラスAndroid.os.Bundleを受け取りました。これは通常、異なるタイプの2つのビューが同じ階層内で同じIDを持つ場合に発生します。このビューのIDはid/mapViewIdです。他のビューが同じIDを使用しないようにしてください。 Android.view.View.onRestoreInstanceState(View.Java:6161)で
しかし、このビューは私の活動の中で唯一のものです。だから、私は尋ねています:
ビューの状態を保存する正しい方法は何ですか?
super.OnSaveInstanceState()
の結果を削除し、独自の結果を返します。その後、OnRestoreInstanceState(Parcelable)
で作成したものを返します。
その解決策は次のとおりです。