どうも、プログラミング始めてそろそろ3週間が経とうとしています。
なんだか、日々進んでんだか、進んでないんだか。
とりあえずActionbarTabを使おうとしたら、Lollipop(API Level 21)から、Spinnerとともに非推奨だぞと言われたのでPagerSlidingTabStripを利用する事に。
雑魚なので、躓いたのでメモ
参考はこちら
まずは、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で書いてて、表示されない、。。。なんでだ!?と悩み続けてた。役にたたないメモでごめんなさい。