Android2.Xにも対応させるために、supportパッケージのFragmentとActionBarSerlockを使います。
onCreateでActionBarにタブを追加して、好きなタブを選択します。
すでに選択されているタブを再度選択した場合には、何もしないようにしています。
この時、選択されているタブは、getSupportActionBar().getSelectedTab().getPosition()で取得することが可能なのですが、初回に0が帰ってくるようなので、初期表示が出来ませんでした。
なので、メンバ変数にmSelectedTabPositionを保持するようにしています。
onCreateでTabを選択していますが、ここで普通にFragmentを設定するようにすれば問題ないとも言えますね。
public class SampleActivity extends SherlockFragmentActivity implements TabListener, FragmentManager.OnBackStackChangedListener { private Fragment mFragment; private int mSelectedTabPosition = -1; // 何番目のタブが選択されているか @Override public void onCreate(Bundle savedInstanceState) { setTheme(R.style.Theme_Sherlock); super.onCreate(savedInstanceState); setContentView(R.layout.main); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.addOnBackStackChangedListener(this); // ActionBar final ActionBar actionBar = getSupportActionBar(); actionBar.addTab(actionBar.newTab().setText("Tab 1").setTabListener(this)); actionBar.addTab(actionBar.newTab().setText("Tab 2").setTabListener(this)); actionBar.addTab(actionBar.newTab().setText("Tab 3").setTabListener(this)); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.getTabAt(0).select(); // 0番目のタブを選択しておく } @Override public void onBackStackChanged() { } @Override public void onTabSelected(Tab tab, FragmentTransaction transaction) { int tabPosition = tab.getPosition(); if (mSelectedTabPosition == tabPosition) { return; } mSelectedTabPosition = tabPosition; switch (tabPosition) { case 0: mFragment = Fragment.instantiate(this, Tab1Fragment.class.getName()); transaction.add(R.id.fragment_container, mFragment); break; case 1: mFragment = Fragment.instantiate(this, Tab2Fragment.class.getName()); transaction.add(R.id.fragment_container, mFragment); break; case 2: mFragment = Fragment.instantiate(this, Tab3Fragment.class.getName()); transaction.add(R.id.fragment_container, mFragment); break; default: break; } } @Override public void onTabUnselected(Tab tab, FragmentTransaction transaction) { transaction.remove(mFragment); } @Override public void onTabReselected(Tab tab, FragmentTransaction transaction) { } }
Android API プログラミング・リファレンス [Android 2.3/3.x/4.0/4.1対応]
- 作者: 高見知英,菅野祥礼,神原健一,茶圓亮,松岡謙治
- 出版社/メーカー: マイナビ
- 発売日: 2012/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る