package cn.zhaiyifan.github.ui.base;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.widget.TabHost;
import com.github.kevinsawicki.wishlist.ViewUtils;
import cn.zhaiyifan.github.R;
import cn.zhaiyifan.github.ui.widget.ViewPager;
import roboguice.inject.InjectView;
/**
* Activity with tabbed pages
*
* @param <V>
*/
public abstract class TabPagerActivity<V extends PagerAdapter & FragmentProvider>
extends PagerActivity implements TabHost.OnTabChangeListener, TabHost.TabContentFactory {
@InjectView(R.id.tabs)
protected TabLayout mTabLayout;
@InjectView(R.id.viewpager)
protected ViewPager mViewPager;
/**
* Pager adapter
*/
protected V mPagerAdapter;
@Override
public void onPageSelected(final int position) {
super.onPageSelected(position);
}
@Override
public void onTabChanged(String tabId) {
}
@Override
public View createTabContent(String tag) {
return ViewUtils.setGone(new View(getApplication()), true);
}
/**
* Create pager adapter
*
* @return pager adapter
*/
protected abstract V createAdapter();
/**
* Get title for position
*
* @return title
*/
protected String getTitle(final int position) {
return mPagerAdapter.getPageTitle(position).toString();
}
/**
* Get icon for position
*
* @return icon
*/
protected String getIcon(final int position) {
return null;
}
/**
* Set tab and pager as gone or visible
*
* @return this activity
*/
protected TabPagerActivity<V> setGone(boolean gone) {
ViewUtils.setGone(mTabLayout, gone);
ViewUtils.setGone(mViewPager, gone);
return this;
}
/**
* Set current item to new position
* <p/>
* This is guaranteed to only be called when a position changes and the
* current item of the pager has already been updated to the given position
* <p/>
* Sub-classes may override this method
*/
protected void setCurrentItem(final int position) {
// Intentionally left blank
}
private void updateCurrentItem(final int newPosition) {
if (newPosition > -1 && newPosition < mPagerAdapter.getCount()) {
mViewPager.setItem(newPosition);
setCurrentItem(newPosition);
}
}
private void createPager() {
mPagerAdapter = createAdapter();
invalidateOptionsMenu();
mViewPager.setAdapter(mPagerAdapter);
}
public void updateTabs() {
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabsFromPagerAdapter(mPagerAdapter);
}
/**
* Configure tabs and pager
*/
protected void configureTabPager() {
mViewPager.addOnPageChangeListener(this);
int tabTextColor = getResources().getColor(R.color.titleTextColor);
mTabLayout.setTabTextColors(tabTextColor, tabTextColor);
if (mPagerAdapter == null) {
createPager();
updateTabs();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
configureTabPager();
}
@Override
protected FragmentProvider getProvider() {
return mPagerAdapter;
}
}