package com.example.adapter;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import com.example.fragment.ExampleFragment;
import java.util.ArrayList;
import java.util.List;
public class TabsFragmentPagerAdapter extends FragmentPagerAdapter implements ActionBar.TabListener, ViewPager.OnPageChangeListener // TODO: use FragmentPagerAdapter or FragmentStatePagerAdapter
{
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private final List<TabInfo> mTabList = new ArrayList<>();
public TabsFragmentPagerAdapter(FragmentActivity activity, ActionBar actionBar, ViewPager viewPager)
{
super(activity.getSupportFragmentManager());
mContext = activity;
mActionBar = actionBar;
mViewPager = viewPager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public static String getFragmentTag(int viewPagerId, int position)
{
return "android:switcher:" + viewPagerId + ":" + position;
}
@Override
public int getCount()
{
return mTabList.size();
}
@Override
public Fragment getItem(int position)
{
//TabInfo info = mTabList.get(position);
//return Fragment.instantiate(mContext, info.clss.getName(), info.args);
return ExampleFragment.newInstance(Integer.toString(position)); // TODO
}
@Override
public CharSequence getPageTitle(int position)
{
return "Fragment " + position;
}
@Override
public void onPageSelected(int position)
{
try
{
mActionBar.setSelectedNavigationItem(position);
}
catch(IllegalStateException e)
{
e.printStackTrace();
}
}
@Override
public void onPageScrollStateChanged(int state)
{
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
}
public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args)
{
String tag = (String) tab.getTag();
TabInfo info = new TabInfo(tag, clss, args);
mTabList.add(info);
mActionBar.addTab(tab.setTabListener(this));
notifyDataSetChanged();
}
public void refill()
{
notifyDataSetChanged();
}
public static final class TabInfo
{
private final String mTag;
private final Class<?> mClss;
private final Bundle mArgs;
TabInfo(String tag, Class<?> clss, Bundle args)
{
mTag = tag;
mClss = clss;
mArgs = args;
}
}
}