package info.justaway.adapter.main;
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.view.ViewPager;
import java.util.ArrayList;
import info.justaway.fragment.main.tab.BaseFragment;
import info.justaway.model.AccessTokenManager;
import info.justaway.model.TabManager;
import info.justaway.model.UserListCache;
import twitter4j.UserList;
/**
* MainActivityで使うPagerAdapter
*/
public class MainPagerAdapter extends FragmentPagerAdapter {
private final Context mContext;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
private static final class TabInfo {
private final Class<? extends Fragment> mClazz;
private final Bundle mArgs;
private String mTabTitle;
private String mSearchWord;
private final long mId;
/**
* タブ内のActivity、引数を設定する。
*
* @param clazz タブに表示するFragment
* @param args タブに表示するFragmentに対する引数
* @param tabTitle タブのタイトル
* @param id タブの識別子、タブの取得に利用する
*/
TabInfo(Class<? extends Fragment> clazz, Bundle args, String tabTitle, long id) {
mClazz = clazz;
mArgs = args;
mTabTitle = tabTitle;
mId = id;
}
TabInfo(Class<? extends Fragment> clazz, Bundle args, String tabTitle, long id, String searchWord) {
mClazz = clazz;
mArgs = args;
mTabTitle = tabTitle;
mId = id;
mSearchWord = searchWord;
}
}
public MainPagerAdapter(FragmentActivity context, ViewPager viewPager) {
super(context.getSupportFragmentManager());
viewPager.setAdapter(this);
mContext = context;
mViewPager = viewPager;
}
@Override
public BaseFragment getItem(int position) {
TabInfo info = mTabs.get(position);
return (BaseFragment) Fragment.instantiate(mContext, info.mClazz.getName(), info.mArgs);
}
@Override
public long getItemId(int position) {
return mTabs.get(position).mId;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
public BaseFragment findFragmentByPosition(int position) {
return (BaseFragment) instantiateItem(mViewPager, position);
}
public int findPositionById(long id) {
int position = 0;
for (TabInfo tab : mTabs) {
if (tab.mId == id) {
return position;
}
position++;
}
return -1;
}
public int findPositionBySearchWord(String searchWord) {
int position = 0;
for (TabInfo tab : mTabs) {
if (tab.mId <= TabManager.SEARCH_TAB_ID && searchWord.equals(tab.mSearchWord)) {
return position;
}
position++;
}
return -1;
}
public BaseFragment findFragmentById(long id) {
int position = 0;
for (TabInfo tab : mTabs) {
if (tab.mId == id) {
return (BaseFragment) instantiateItem(mViewPager, position);
}
position++;
}
return null;
}
/**
* タブ追加
*
* @param clazz タブに表示するFragment
* @param args タブに表示するFragmentに対する引数
* @param tabTitle タブのタイトル
* @param id タブの識別子、タブの取得に利用する
*/
public void addTab(Class<? extends Fragment> clazz, Bundle args, String tabTitle, long id) {
TabInfo info = new TabInfo(clazz, args, tabTitle, id);
mTabs.add(info);
}
public void addTab(Class<? extends Fragment> clazz, Bundle args, String tabTitle, long id, String searchWord) {
TabInfo info = new TabInfo(clazz, args, tabTitle, id, searchWord);
mTabs.add(info);
}
public void clearTab() {
mTabs.clear();
}
@Override
public CharSequence getPageTitle(int position) {
TabInfo tab = mTabs.get(position);
if (tab.mTabTitle.equals("-")) {
UserList userList = UserListCache.getUserList(tab.mArgs.getInt("userListId"));
if (userList != null) {
if (userList.getUser().getId() == AccessTokenManager.getUserId()) {
tab.mTabTitle = userList.getName();
} else {
tab.mTabTitle = userList.getFullName();
}
}
}
return tab.mTabTitle;
}
@Override
public int getCount() {
return mTabs.size();
}
}