[メモ]ICS未満のActionBarActivityにandroid.R.id.contentにFragmentをうまく表示できない

support-v7に含まれているActionBarActivityを使うと、Android2.3等の古いOSでもActionBarのあるActivityを使うことが出来ます。
ですが、ちょっとしたハマりどころがあったのでメモ。

とりあえず実際に中身のあるFragmentを1つ記述して、それをActionBarActivityで表示するとします。
中身をInnerFragmentとして、例えばこんな感じになるのではないでしょうか。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    InnerFragment fragment = new InnerFragment();
    transaction.replace(android.R.id.content, fragment);
    transaction.commit();
}
これでも別にクラッシュは起きませんし、ICS以降では普通に表示されます。 ですが、Android2.3等で動かすと何も表示されません。

理由については理解しきっていないためここでは省略してしまいますが、これを解決するためには自前のレイアウトを介せば何も問題ありません。
FrameLayoutだけ置いたレイアウトXMLを作成しsetContentView()でセットした後、FragmentTransactionではFrameLayoutのIDを使うようにしましょう。
詳しいことはStackOverflow読みましょう。

(XMLのID = R.layout.frame, FrameLayoutのID = R.id.frame とした例)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.frame);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    InnerFragment fragment = new InnerFragment();
    transaction.replace(R.id.frame, fragment);
    transaction.commit();
}

コメント

  1. Pinochle Casino Hotel Las Vegas, NV - MapYRO
    Find your way around 시흥 출장안마 the casino, 전라북도 출장샵 find where everything is 진주 출장샵 located with this helpful guide. 서귀포 출장마사지 Pinochle 광주 출장샵 Casino Hotel - Las Vegas, NV.

    返信削除

コメントを投稿

このブログの人気の投稿

ポインティングデバイスに悩む

診断メーカービューアの今後について

2019年の振り返り