package com.rafali.flickruploader.ui.widget;
import java.util.Locale;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.rafali.flickruploader2.R;
import com.viewpagerindicator.TitlePageIndicator;
public abstract class TabView extends LinearLayout implements ViewPager.OnPageChangeListener {
private final int nbTabs;
public TabView(Context context, AttributeSet attrs) {
this(context, attrs, 2, 0);
}
public TabView(Context context, AttributeSet attrs, int nbTabs, int defaultTabIndex) {
super(context, attrs);
setOrientation(VERTICAL);
this.nbTabs = nbTabs;
View.inflate(context, R.layout.tab_view, this);
titleIndicator = (TitlePageIndicator) findViewById(R.id.titles);
pager = (ViewPager) findViewById(R.id.pager);
gridViewsArray = new View[nbTabs];
feedPagerAdapter = new FeedPagerAdapter();
pager.setAdapter(feedPagerAdapter);
titleIndicator.setViewPager(pager);
titleIndicator.setOnPageChangeListener(this);
titleIndicator.setCurrentItem(defaultTabIndex);
}
protected TitlePageIndicator titleIndicator;
protected ViewPager pager;
protected final View[] gridViewsArray;
private FeedPagerAdapter feedPagerAdapter;
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
protected abstract View createTabViewItem(int position);
protected abstract int getTabViewItemTitle(int position);
class FeedPagerAdapter extends PagerAdapter {
{
for (int i = 0; i < nbTabs; i++) {
gridViewsArray[i] = createTabViewItem(i);
}
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view;
if (gridViewsArray[position] != null) {
view = gridViewsArray[position];
} else {
view = createTabViewItem(position);
gridViewsArray[position] = view;
}
if (view.getParent() != container)
container.addView(view);
return view;
}
@Override
public int getItemPosition(Object object) {
for (int i = 0; i < gridViewsArray.length; i++) {
if (gridViewsArray[i] == object)
return i;
}
return POSITION_NONE;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return nbTabs;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
@Override
public CharSequence getPageTitle(int position) {
return getContext().getResources().getString(getTabViewItemTitle(position)).toUpperCase(Locale.US);
}
}
public void destroyView(int position) {
if (gridViewsArray[position] != null) {
gridViewsArray[position] = null;
}
feedPagerAdapter.notifyDataSetChanged();
}
public void setCurrentItem(int position) {
titleIndicator.setCurrentItem(position);
}
public View getCurrentView() {
return pager != null ? gridViewsArray[pager.getCurrentItem()] : null;
}
public int getCurrentItem() {
return pager != null ? pager.getCurrentItem() : 0;
}
public View getTabView(int position) {
return pager != null ? gridViewsArray[position] : null;
}
public int getTabCount() {
return nbTabs;
}
}