package pyp.navigation.association;
import java.util.ArrayList;
import java.util.List;
import pyp.navigation.R;
import pyp.navigation.association.one.FragmentOne_List;
import pyp.navigation.association.three.FragmentThree;
import pyp.navigation.association.two.FragmentTwo;
import pyp.navigation.main.MainActivity;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* @Title: AssociationFragment
* @Description: 社团模块
* @author qsuron
* @date 2014-7-22
* @email admin@qiushurong.cn
*/
public class AssociationFragment extends Fragment implements OnPageChangeListener {
private MainActivity parentActivity;
private View parentView = null;
// 选项卡序号
public static final int FRAGMENT_ONE = 0;
public static final int FRAGMENT_TWO = 1;
public static final int FRAGMENT_THREE = 2;
public static final String EXTRA_TAB = "tab";
public static final String EXTRA_QUIT = "extra.quit";
protected int mCurrentTab = 0; // 当前tab
protected int mLastTab = -1; // 下一个tab
protected ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); // 存放选项卡信息的列表
protected MyViewPageAdapter myAdapter = null; // 显示区域适配器
protected ViewPager mPager; // 显示区域
protected TitleIndicator mIndicator; // 选项卡控件
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
parentActivity = (MainActivity) activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
initViews(inflater, container);
return parentView;
}
public void initViews(LayoutInflater inflater, ViewGroup container) {
// 这段代码是为了解决BUG(重新打开fragment数据丢失)
// 通过parentView判断之前是否打开过
// if (parentView != null) {
// // Log.i("qsuron", "test-null");
// // 如果打开过,就获取父视图
// ViewGroup parent = (ViewGroup) parentView.getParent();
// // 如果获取到的父视图不为空,就移除该fragment
// if (parent != null) {
// // Log.i("qsuron", "test-null-null");
// parent.removeView(parentView);
// }
// // 返回
// return;
// }
// 如果之前没打开过,那么照常进行
parentView = inflater.inflate(R.layout.association_main, container,
false);
if (mLastTab < 0)
mCurrentTab = supplyTabs(mTabs);
myAdapter = new MyViewPageAdapter(parentActivity,
parentActivity.getSupportFragmentManager(), mTabs);
Log.i("qsuron", "myAdapter - " + myAdapter.getCount());
mPager = (ViewPager) parentView.findViewById(R.id.pager);
mPager.setAdapter(myAdapter);
mPager.setOnPageChangeListener(this);
mPager.setOffscreenPageLimit(mTabs.size());
Log.i("qsuron", "mTab.size() = " + mTabs.size());
mIndicator = (TitleIndicator) parentView
.findViewById(R.id.pagerindicator);
mIndicator.init(mCurrentTab, mTabs, mPager);
mPager.setCurrentItem(mCurrentTab);
mLastTab = mCurrentTab;
// 设置viewpager内部页面之间的间距
mPager.setPageMargin(getResources().getDimensionPixelSize(
R.dimen.page_margin_width));
// 设置viewpager内部页面间距的drawable
mPager.setPageMarginDrawable(R.color.page_viewer_margin_color);
}
/**
* 返回layout id
*
* @return layout id
*/
protected int getMainViewResId() {
return R.layout.association_main;
}
/**
* 方法 addTabInfo 添加一个选项卡
*
* @param tab
* void
*/
public void addTabInfo(TabInfo tab) {
mTabs.add(tab);
myAdapter.notifyDataSetChanged();
}
/**
* 方法 addTabInfos 从列表添加选项卡
*
* @param tabs
* fragment列表
*/
public void addTabInfos(ArrayList<TabInfo> tabs) {
mTabs.addAll(tabs);
myAdapter.notifyDataSetChanged();
}
/**
* 方法 getFragmentById 通过ID获取对应的选项卡对象
*
* @param tabId
* 选项卡id
* @return TabInfo 选项卡
*/
protected TabInfo getFragmentById(int tabId) {
if (mTabs == null)
return null;
for (int index = 0, count = mTabs.size(); index < count; index++) {
TabInfo tab = mTabs.get(index);
if (tab.getId() == tabId) {
return tab;
}
}
return null;
}
/**
* 方法 navigate 跳转到任意选项卡
*
* @param tabId
* 选项卡下标
*/
public void navigate(int tabId) {
for (int index = 0, count = mTabs.size(); index < count; index++) {
if (mTabs.get(index).getId() == tabId) {
mPager.setCurrentItem(index);
}
}
}
/**
* 方法 getIndicator 取得选项卡对象
*
* @return TitleIndicator 选项卡对象
*/
public TitleIndicator getIndicator() {
return mIndicator;
}
/**
* 方法 supplyTabs 初始化内容列表
*
* @param tabs
* fragment列表
* @return int 默认进入后显示的首页
*/
protected int supplyTabs(List<TabInfo> tabs) {
Log.i("qsuron", "supplyTabs");
tabs.add(new TabInfo(FRAGMENT_ONE,
getString(R.string.test_fragment_one), FragmentOne_List.class));
tabs.add(new TabInfo(FRAGMENT_TWO,
getString(R.string.test_fragment_two), FragmentTwo.class));
tabs.add(new TabInfo(FRAGMENT_THREE,
getString(R.string.test_fragment_three), true,
FragmentThree.class));
return FRAGMENT_TWO;
}
/**
* 重写 onPageScrolled
*
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrolled(int,
* float, int)
*/
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
mIndicator.onScrolled((mPager.getWidth() + mPager.getPageMargin())
* position + positionOffsetPixels);
}
/**
* 重写 onPageSelected
*
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected(int)
*/
@Override
public void onPageSelected(int position) {
mIndicator.onSwitched(position);
mCurrentTab = position;
}
/**
* 重写 onPageScrollStateChanged
*
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrollStateChanged(int)
*/
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
mLastTab = mCurrentTab;
}
}
}