封装ViewPager适配器简单封装

public class MainActivity extends AppCompatActivity {

    // 数据源
    static List<String> datas = new ArrayList<>();
    static{
        datas.add("java");
        datas.add("android");
        datas.add("ios");
        datas.add("html5");
        datas.add("https");
    }

    private CommonViewPagerAdapter mAdapter; // 适配器
    private ViewPager mPager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        mPager = (ViewPager)findViewById(R.id.vp);
        mAdapter = new CommonViewPagerAdapter(datas, new ViewPagerHolderCreator() {
            @Override
            public ViewPagerHolder createViewHolder() {
                return new MyViewPagerHolder();
            }
        });
        mPager.setAdapter(mAdapter);
    }

    private class MyViewPagerHolder implements ViewPagerHolder<String>{
        private TextView title;
        @Override
        public View createView(Context context) {
            View view = LayoutInflater.from(context).inflate(R.layout.view_item, null);
            title = (TextView) view.findViewById(R.id.tv_title);
            return view;
        }

        @Override
        public void onBind(Context context, int position, String data) {
            title.setText(String.format("position:%d -- title:%s", position, data));
        }
    }

}

public class CommonViewPagerAdapter<T> extends PagerAdapter {
    private List<T> mDatas;// 数据源
    private ViewPagerHolderCreator mCreator;           // 布局

    public CommonViewPagerAdapter(List<T> datas, ViewPagerHolderCreator creator){
        this.mDatas = datas;
        this.mCreator = creator;
    }

    @Override
    public int getCount() {
        return mDatas.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // 重点在这儿了,不要把布局写死,而是通过接口提供布局
        // 也不再这里绑定数,数据绑定交个A调用者
        View view = getView(position, null, container);
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    private View getView(int position , View view, ViewGroup container){
        ViewPagerHolder holder = null;
        if (holder == null){
            holder = mCreator.createViewHolder();
            view = holder.createView(container.getContext());
            view.setTag(R.id.common_view_pager_item_tag, holder);
        }else{
            holder = (ViewPagerHolder) view.getTag(R.id.common_view_pager_item_tag);
        }

        if(holder != null && mDatas != null && mDatas.size() > 0){
            holder.onBind(container.getContext(), position, mDatas.get(position));
        }

        return view;

    }
}



public interface ViewPagerHolder<T> {
    /**
     * 创建View
     * @param context
     * @return
     */
    View createView(Context context);

    /**
     * 绑定数
     * @param context
     * @param position
     * @param data
     */
    void onBind(Context context, int position, T data);

}

public interface ViewPagerHolderCreator<VH extends ViewPagerHolder> {
    /**
     * 创建ViewHolder
     * @return
     */
    VH createViewHolder();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值