LoginSignup
19
17

More than 5 years have passed since last update.

ActionbarTabではなくPagerSlidingTabStripを使う。

Last updated at Posted at 2015-03-19

どうも、プログラミング始めてそろそろ3週間が経とうとしています。
なんだか、日々進んでんだか、進んでないんだか。
とりあえずActionbarTabを使おうとしたら、Lollipop(API Level 21)から、Spinnerとともに非推奨だぞと言われたのでPagerSlidingTabStripを利用する事に。

雑魚なので、躓いたのでメモ

参考はこちら

こういうのを作る。ちなみに出来上がりはこれではない。
Screen Shot 2015-03-19 at 22.10.19.png

まずは、build.gradleに以下を追加する。

compile 'com.jpardogo.materialtabstrip:library:1.0.9'

こういう感じだと思う

dependencies {
    compile 'com.jpardogo.materialtabstrip:library:1.0.9'
}

次は、
PagerSlidingTabStrip widgetをレイアウトに突っ込めとの事。*ViewPagerの上に書きましょう

<com.astuetz.PagerSlidingTabStrip
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

次にonCreateの中にこれを書きなさいとの事

 // Initialize the ViewPager and set an adapter
 ViewPager pager = (ViewPager) findViewById(R.id.pager);
 pager.setAdapter(new TestAdapter(getSupportFragmentManager()));

 // Bind the tabs to the ViewPager
 PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
 tabs.setViewPager(pager);

多分こんな感じになる。

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(new TestAdapter(getSupportFragmentManager()));


        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);

    }

あとは、アダプターがなんだこうだ原文には書かれているんだけれども今回はこうやってみました。

こんな感じでTabの部分を記載

private class TestAdapter extends FragmentPagerAdapter {

        private final String[] TITLES = {"TEST 1", "TEST 2"};

        public TestAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return = new AFragment();
                case 1:
                    return = new BFragment();
            }

            return null;
        }


        @Override
        public int getCount() {
            return TITLES.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return TITLES[position];
        }
    }

MainActivityを見るとこんな感じです。

public class MainActivity extends ActionBarActivity {
//  public static Context appContext;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(new TestAdapter(getSupportFragmentManager()));


        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);

    }

    private class TestAdapter extends FragmentPagerAdapter {

        private final String[] TITLES = {"TEST 1", "TEST 2"};

        public TestAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return = new AFragment();
                case 1:
                    return = new AFragment();
            }

            return null;
        }


        @Override
        public int getCount() {
            return TITLES.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return TITLES[position];
        }
    }
}

ちなみにxmlはこんな感じです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:viewpager="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center">

    <com.astuetz.PagerSlidingTabStrip
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        viewpager:pstsShouldExpand="true">
        </com.astuetz.PagerSlidingTabStrip>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:layout_width="match_parent" />

    <LinearLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        </LinearLayout>
</LinearLayout>

ちなみにMaterialデザイン対応したタブはこちらが参考になります。

長々と書きましたが、僕はこれにとても苦労したという話し。しかも、ViewPagerの下のLinearLayoutの高さを最初match_parentで書いてて、表示されない、。。。なんでだ!?と悩み続けてた。役にたたないメモでごめんなさい。

19
17
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
19
17