2012年05月06日

Fragment + ViewPager 使用時の不具合について

FragmentとViewPagerを使った画面構成の勉強中なのですが、onPause()をオーバーライドしてもいないのにonPause()で強制終了していて、先日軽くハマったので備忘録としてエントリーにしておこうと思います。

まず、不具合の内容。

「ViewPagerを使った横スワイプによる画面切り替えで内容をFragmentで作成していた場合、対象Activityがバックグラウンドに回る場合(onPauseとか)に強制終了となる」

というものです。

で、原因はというとSDKのバグのようでして、onSaveInstanceState(Bundle outState)でFragmentの状態保持をしていない場合(すなわち、outStateがnullの場合)にSDKの内部処理でそのnullのBundleにアクセスしてしまうルートがあるのです。
googleへのバグ報告も早々に行われてはいるのですが、まだ対処されてない模様。
まぁ、実際のアプリ制作でFragmentの状態保持しないってことはレアケースですからね^^;


ということで、対策としては、onSaveInstanceState()でダミーの要素をputしとけばOKです。

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // Notice: FrameWorkバグ対策。Bundleに何か入れとくとonPause()で落ちないようになる。
    if(outState.isEmpty()){
        outState.putBoolean("WORKAROUND_FOR_BUG_19917_KEY", true);
    }
}

以上、誰かの役に立てれば幸い。
posted by nariki at 21:47| Comment(0) | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック