Android ViewPager之tab万能适配器

来源:互联网 发布:mac软件为什么无法删除 编辑:程序博客网 时间:2024/05/29 17:47

这里写图片描述

复杂的左右滑动页面,需要用到viewpager和fragment,下面制作一个万能tab适配器,tab可以填充布局。

public abstract class TabFragmentPagerAdapter<T> extends FragmentPagerAdapter {    private List<String> list_title;    private List<Fragment> list_fragment;    private Context context;    private TabLayout tabLayout;    private ViewHolder viewHolder;    private int layout_id = 0;    private List<T> list_bean;    private ViewPager viewPager;    public TabFragmentPagerAdapter(Context context, FragmentManager fm, List<Fragment> fragments, List<String> list_title) {        super(fm);        this.context = context;        this.list_title = list_title;        this.list_fragment = fragments;    }    public TabFragmentPagerAdapter(Context context, FragmentManager fm, List<Fragment> fragments, List<String> list_title,ViewPager viewPager,TabLayout tabLayout) {        super(fm);        this.context = context;        this.list_title = list_title;        this.list_fragment = fragments;        this.tabLayout=tabLayout;        this.viewPager=viewPager;        tabLayout.setupWithViewPager(viewPager);    }    public TabFragmentPagerAdapter(Context context, FragmentManager fm, List<Fragment> list_fragment, List<T> list_bean, ViewPager viewPager, TabLayout tabLayout, int layout_id) {        super(fm);        this.list_fragment = list_fragment;        this.list_bean = list_bean;        this.context = context;        this.tabLayout = tabLayout;        this.layout_id = layout_id;        this.viewPager=viewPager;        this.tabLayout.setupWithViewPager(this.viewPager);        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                onMyPageSelected(position);            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    public int  getCurrentPostion(){        return viewPager.getCurrentItem();    }    public void onMyPageSelected(int position){}    @Override    public Fragment getItem(int position) {        return list_fragment.get(position);    }    @Override    public int getCount() {        return list_fragment.size();    }    @Override    public CharSequence getPageTitle(int position) {        if (list_title != null) {            return list_title.get(position);        }        return null;    }    public void onCreateViewHolder() {        if (layout_id == 0) {            return;        }        int size = list_bean.size();        for (int i = 0; i < list_bean.size(); i++) {            TabLayout.Tab tab = tabLayout.getTabAt(i);            //为每个标签设置布局            tab.setCustomView(layout_id);            viewHolder = new ViewHolder(tab.getCustomView());            if (i == 0) {                onMyTabSelected(viewHolder,i);            }            onBindViewHolder(viewHolder, i);        }        this.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {            @Override            public void onTabSelected(TabLayout.Tab tab) {                onMyTabSelected(new ViewHolder(tab.getCustomView()), tab.getPosition());            }            @Override            public void onTabUnselected(TabLayout.Tab tab) {                onMyTabUnselected(new ViewHolder(tab.getCustomView()), tab.getPosition());            }            @Override            public void onTabReselected(TabLayout.Tab tab) {            }        });    }    public void onBindViewHolder(ViewHolder viewHolder, int position) {    }    public void onMyTabSelected(ViewHolder viewHolder, int position) {    }    public void onMyTabUnselected(ViewHolder viewHolder, int position) {    }//    public void setSelect(int position) {//        for (int i = 0; i < list_bean.size(); i++) {////            TabLayout.Tab tab = tabLayout.getTabAt(i);//            if (i == position) {//                onMyTabSelected(new ViewHolder(tab.getCustomView()), position);////            } else {//                onMyTabUnselected(new ViewHolder(tab.getCustomView()), position);////            }//////        }//    }    public static class ViewHolder {        private SparseArray<View> array_view;        public View itemView;        public ViewHolder(View itemView) {            this.itemView = itemView;            array_view = new SparseArray<View>();        }        public <T extends View> T getView(int viewId) {            View view = array_view.get(viewId);            if (view == null) {                view = itemView.findViewById(viewId);                array_view.put(viewId, view);            }            return (T) view;        }        public void setText(int tv_id, String text) {            TextView tv = getView(tv_id);            tv.setText(text);        }        public void setText(int tv_id, int text) {            TextView tv = getView(tv_id);            tv.setText(String.valueOf(text));        }        public void setTextColor(int tv_id, int color) {            TextView tv = getView(tv_id);            tv.setTextColor(color);        }        public void setBackgroundResource(int v_id, int resid) {            View view = getView(v_id);            view.setBackgroundResource(resid);        }        public void setOnClickListener(int res_id, View.OnClickListener onClickListener) {            getView(res_id).setOnClickListener(onClickListener);        }    }}
tabFragmentPagerAdapter = new TabFragmentPagerAdapter<Map<Integer, String>>(                                MiaoshaActivity.this, getSupportFragmentManager(),                                list_fragment, list_map, viewPager, tabLayout, R.layout.item_miaosha_tab) {                            @Override                            public void onBindViewHolder(ViewHolder viewHolder, int position) {                                super.onBindViewHolder(viewHolder, position);                                viewHolder.setText(R.id.tv_top, list_map.get(position).get(0));                                viewHolder.setText(R.id.tv_bottom, list_map.get(position).get(1));                            }                            //tab选中时回调                            @Override                            public void onMyTabSelected(ViewHolder viewHolder, int position) {                                super.onMyTabSelected(viewHolder, position);                                LogUtils.log("选中", position);                                potison_current = position;                                viewHolder.itemView.setBackgroundColor(getResources().getColor(R.color.red));                                String end_time = list_end_time.get(position);                                if (Long.valueOf(list_end_time.get(potison_current)) - TimeAndAgeUtils.getCureentTimeStampLong()> 0l) {                                    tv_time.setText(TimeAndAgeUtils.getDistance2CurrentTimeStamp(end_time));                                    if (map_thread.get(potison_current) == null) {                                        scheduledPeriodThreadPool(potison_current);                                    }                                } else {                                    if (map_thread.get(potison_current) != null) {                                        map_thread.get(potison_current).shutdownNow();                                    }                                    tv_time.setText("已结束");                                }                            }                            //tab未选中时回调                            @Override                            public void onMyTabUnselected(ViewHolder viewHolder, int position) {                                super.onMyTabUnselected(viewHolder, position);                                viewHolder.itemView.setBackgroundColor(getResources().getColor(R.color.transparent));                            }                        };                        viewPager.setTabFragmentPagerAdapter(tabFragmentPagerAdapter);

参考:Android ViewPager

原创粉丝点击