みなさん、Fragment使ってますか、Fragment。
最近Androidやってません。ryosmsです
さて、Activity#onDestroyでFragmentの操作するのは仕様で禁止されてるってのは常識ですよね?私は昨日知りました(だってonDestroyとかめったに使わないし、普通はそんなところでFragment操作するようなことないもん)
参考:[Android] Activity#onDestroyではFragmentTransactionの操作はできない | うら紙のメモ
ところが、ですよ。
なんとActivity#onResumeで呼んでるFragmentTransaction#commitに対してIllegalStateExceptionが「can not perform this action after onSaveInstanceState」とか言い出したんですよ。
というわけで回避策のメモ
一応、環境とか前提条件とか
#困ったときのstackoverflow ということで、普通に回避策がstackoverflowに載ってました
android - IllegalStateException - Fragment support library - Stack Overflow
原因はAndroidManifest.xmlのuses-sdkのtargetSdkVersionでした。
(このアプリではないけど)最近のLintだとtargetSdkVersionに古いSdkVersion指定してると怒られたのはこのせいか #知らんけど
以上!
Special Thanks @zaki50
(てか、上記の記事にも載ってるけど、FragmentActivity#onResumeFragmentとかあるの知らんかった)
- もともとのアプリはAndroid2.x(主に2.2、2.3)がターゲット
- Android3.x対応&アプリの修正の際にFragment化
- Support Library v4を使用
- onResumeで落ちるのはAndroid4.xのみ
#困ったときのstackoverflow ということで、普通に回避策がstackoverflowに載ってました
android - IllegalStateException - Fragment support library - Stack Overflow
原因はAndroidManifest.xmlのuses-sdkのtargetSdkVersionでした。
<uses-sdk maxSdkVersion="x" minSdkVersion="x" targetSdkVersion="8" />を
<uses-sdk maxSdkVersion="x" minSdkVersion="x" targetSdkVersion="17" />にしたら直ったよ!
(このアプリではないけど)最近のLintだとtargetSdkVersionに古いSdkVersion指定してると怒られたのはこのせいか #知らんけど
以上!
Special Thanks @zaki50
(てか、上記の記事にも載ってるけど、FragmentActivity#onResumeFragmentとかあるの知らんかった)
コメント