像适配ListView一样适配ViewPager的的PagerAdapter

来源:互联网 发布:数据库采集技术 编辑:程序博客网 时间:2024/06/02 03:19

源码:

public abstract class BasePagerAdapter<T> extends PagerAdapter {    protected Context context;    private List<T> list;    private List<View> views;    private int notifyCount;    public BasePagerAdapter(Context context) {        this.context = context;        this.list = new ArrayList<>();        views = new ArrayList<>();    }    public void clear() {        list.clear();    }    public void reload(Collection<? extends T> collection) {        clear();        loadMore(collection);    }    public void loadMore(Collection<? extends T> collection) {        list.addAll(collection);        notifyDataSetChanged();    }    public abstract View getView(int position, ViewGroup parent);    @Override    public int getCount() {        return list != null ? list.size() : 0;    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }    public T getItem(int position) {        return list.get(position);    }    @Override    public Object instantiateItem(ViewGroup container, int position) {        View view;        if (views.size() <= position) {            view = getView(position, container);            views.add(view);        } else {            view = views.get(position);        }        if (view.getParent() == null){            container.addView(view);        }        return view;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        if (views.size() > position) {            container.removeView(views.get(position));        }    }    protected LayoutInflater getLayoutInflater() {        return LayoutInflater.from(context);    }    //  ViewPager的更新,http://www.cnblogs.com/maoyu417/p/3740209.html    @Override    public void notifyDataSetChanged() {        super.notifyDataSetChanged();        notifyCount = getCount();    }    @Override    public int getItemPosition(Object object) {        if (notifyCount > 0) {            notifyCount--;            return POSITION_NONE;        }        return super.getItemPosition(object);    }}

使用:

public class SamplePagerAdapter extends BasePagerAdapter<SomeObject> {    public SamplePagerAdapter(Context context) {        super(context);    }    @Override    public View getView(int position, ViewGroup parent) {        View itemView = getLayoutInflater().inflate(R.layout.*, parent, false);        ViewHolder viewHolder = new ViewHolder(itemView);        SomeObject obj = getItem(position);        ...        return itemView;    }    static class ViewHolder {        @BindView(R.id.item_image)        SimpleDraweeView itemImage;        @BindView(R.id.title_text)        TextView titleText;        @BindView(R.id.price_text)        TextView priceText;        @BindView(R.id.address_text)        TextView addressText;        @BindView(R.id.create_time_text)        TextView createTimeText;        ViewHolder(View view) {            ButterKnife.bind(this, view);        }    }}
1 0