/*
* Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.ui;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
public class TabViewPagerAdapter extends PagerAdapter {
private static final String KEY_PREFIX = TabViewPagerAdapter.class.getName() + '.';
private static final String STATE_KEY_HIERARCHY_STATE_FORMAT = KEY_PREFIX
+ "hierarchy_state_%1$d";
private View[] mViews;
private CharSequence[] mTitles;
public TabViewPagerAdapter(View[] views, CharSequence[] titles) {
init(views, titles);
}
public TabViewPagerAdapter(View[] views, int[] titleResIds, Context context) {
CharSequence[] titles = new CharSequence[titleResIds.length];
for (int i = 0; i < titleResIds.length; ++i) {
titles[i] = context.getText(titleResIds[i]);
}
init(views, titles);
}
private void init(View[] views, CharSequence[] titles) {
if (views.length != titles.length) {
throw new IllegalArgumentException("View size and title size mismatch");
}
mViews = views;
mTitles = titles;
}
@Override
public int getCount() {
return mViews.length;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = mViews[position];
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeViewAt(position);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public CharSequence getPageTitle(int position) {
return mTitles[position];
}
@Override
public Parcelable saveState() {
Bundle state = new Bundle();
for (int i = 0; i < mViews.length; ++i) {
SparseArray<Parcelable> hierarchyState = new SparseArray<>();
mViews[i].saveHierarchyState(hierarchyState);
state.putSparseParcelableArray(makeHierarchyStateKey(i), hierarchyState);
}
return state;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
if (state == null) {
return;
}
Bundle stateBundle = (Bundle) state;
stateBundle.setClassLoader(loader);
for (int i = 0; i < mViews.length; ++i) {
SparseArray<Parcelable> hierarchyState = stateBundle.getSparseParcelableArray(
makeHierarchyStateKey(i));
if (hierarchyState == null) {
continue;
}
mViews[i].restoreHierarchyState(hierarchyState);
}
}
private String makeHierarchyStateKey(int position) {
return String.format(STATE_KEY_HIERARCHY_STATE_FORMAT, position);
}
}