package com.quick.library;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import com.quick.library.QuickTabView.OnIndicateChangeListener;
/**
* 文字切换标签+ViewPager内容区控件
*
* @author savant-pan
*
*/
public class QuickTabViewPagerView extends LinearLayout implements OnIndicateChangeListener, OnPageChangeListener {
private QuickTabView tabIndicatorView;
private ViewPager viewPager;
public QuickTabViewPagerView(Context context, AttributeSet attrs) {
super(context, attrs);
this.initView();
}
public QuickTabViewPagerView(Context context) {
super(context);
this.initView();
}
private void initView() {
this.setOrientation(LinearLayout.VERTICAL);
this.tabIndicatorView = new QuickTabView(getContext());
this.viewPager = new ViewPager(getContext());
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
this.addView(tabIndicatorView, params);
params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
this.addView(viewPager, params);
this.tabIndicatorView.setOnIndicateChangeListener(this);
this.viewPager.setOnPageChangeListener(this);
}
/**
* 设置显示标签文字及对应内容布局
*
* @param titleViewMap
* 标题及对应View map数据
*/
public void setupLayout(Map<String, View> titleViewMap) {
if (titleViewMap == null || titleViewMap.size() == 0) {
throw new NullPointerException();
}
final List<String> textList = new ArrayList<String>();
final List<View> viewList = new ArrayList<View>();
final Iterator<Entry<String, View>> iterator = titleViewMap.entrySet().iterator();
while (iterator.hasNext()) {// 生成数据列表
final Entry<String, View> item = iterator.next();
textList.add(item.getKey());
viewList.add(item.getValue());
}
// 初始化TextTabIndicateView及ViewPager
this.tabIndicatorView.setupLayout(textList);
this.viewPager.setAdapter(new MyPagerAdapter(viewList));
}
@Override
public void onTabChanged(int position) {
viewPager.setCurrentItem(position, true);
}
@Override
public void onPageSelected(int position) {
this.tabIndicatorView.setCurrentTab(position, false);// 无回设置TextTabIndicateView
}
private class MyPagerAdapter extends PagerAdapter {
private List<View> viewList = new ArrayList<View>();
public MyPagerAdapter(List<View> viewList) {
this.viewList = viewList;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
Log.i("voice", arg1 + "----------------destroyItem");
((ViewPager) arg0).removeView(viewList.get(arg1));
}
@Override
public Object instantiateItem(View arg0, int arg1) {
Log.i("voice", arg1 + "----------------instantiateItem");
((ViewPager) arg0).addView(viewList.get(arg1));
return viewList.get(arg1);
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
}