源码:
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);
}
}
}