ActionBar Tab
ActionのTabを勉強したので覚え書き。
Layoutを定義
LayoutにViewPagerを定義する。
layout.xml
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />
ActionBarの設定
ActionBarのナビゲーションモードをタブに設定する。
MainActivity.java
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tabの作成とActionBar.TabListenerの実装
ActionBarにTabを作成し、Tabにコールバックを登録する。 コールバック内でTabが選択された場合にViewPagerで表示する内容を変更する。
MainActivity.java
public class MainActivity implements ActionBar.TabListener {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// ViewPagerを取得する
mViewPager = (ViewPager) findViewById(R.id.pager);
// タブを作成し、リスナー登録をする
getSupportActionBar().addTab(getSupportActionBar().newTab().setText("First").setTabListener(this);
getSupportActionBar().addTab(getSupportActionBar().newTab().setText("Second").setTabListener(this);
...
}
@Override
public void onTabSelected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
// タブ選択で表示しているページを切り替え
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
// Do nothing
}
@Override
public void onTabReselected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction) {
// Do nothing
}
...
}
FragmentPagerAdapterを実装
FragmentPagerAdapterを拡張したクラスを作成し、ViewPagerにAdapterとして登録する。
MainActivity.java
public class MainActivity implements ActionBar.TabListener {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// ViewPagerを取得する
mViewPager = (ViewPager) findViewById(R.id.pager);
// Adapterを作成する
mTabsAdapter = new TabsAdapter(this);
// Adapterを設定する
mViewPager.setAdapter(new TabsAdapter());
...
}
// FragmentPagerAdapterを拡張したクラス
public static class TabsAdapter extends FragmentPagerAdapter
public TabsAdapter(Activity activity) {
super(activity.getFragmentManager());
}
@Override
public int getCount() {
return 2;
}
@Override
public Fragment getItem(int position) {
return new Fragment();
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "First";
case 1:
return "Second";
}
return null;
}
}
ViewPagerにOnPageChangeListenerを登録
ページ切り替え時のイベント取得のためにOnPageChangeListenerを実装し、ViewPagerにコールバックとして登録する。
また、コールバックの中でTabの選択位置を変更する。
(ここではSimpleOnPageChangeListenerを拡張したクラスを登録。)
MainActivity.java
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// Tabの選択位置を変更する
getSupportActionBar().setSelectedNavigationItem(position);
}
});