2017年2月23日木曜日

BadParcelableException

Android 4.2.2にて(6.0.1では大丈夫だった)。
SupportMapFragmentで以下のライブラリを使用して、Activity再生成すると落ちる。

https://github.com/Clans/FloatingActionButton

MapViewでも同様のようだ。

https://github.com/Clans/FloatingActionButton/issues/56

これはこのライブラリのせいじゃなくてGoogleのせい。2014年からすでに話題になっているが、いまだになおってない。
→com.google.android.gms:play-services-maps:10.2.0 でなおってた

詳しい原因は分からないが、Activity再生成時(saveInstanceState != null)にsaveInstanceStateにParcelクラスのインスタンス(今回は上記ライブラリの状態情報)が入っていると落ちる。onCreateでsuper.onCreate(savedInstanceState)をやるまえに、savedInstanceStateからこのインスタンスを削除してやれば落ちない(削除する状態情報はあとで自前で復帰してやる)。こんな感じ?

if(savedInstanceState != null) {
    SparseArray viewState = (SparseArray)savedInstanceState.get("android:view_state");
     mButton1State = (Parcelable)viewState.get(R.id.button1, null);
     viewState.remove(R.id.button1);
}

以下にMapViewの例がある。


0 件のコメント:

コメントを投稿