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(); }
封装ViewPager适配器简单封装
最新推荐文章于 2021-09-09 16:21:13 发布