10
10

More than 5 years have passed since last update.

ActionBar Tab - ViewPager

Posted at

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);
                    }
                });
10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10