android仿Adapter实现自定义PagerAdapter方法示例

PagerAdapter简介

PagerAdapter是android.support.v4包中的类,它的子类有FragmentPagerAdapter, FragmentStatePagerAdapter,这两个adapter都是Fragment的适配器,用于实现Fragment的滑动效果,这两个adapter的使用和区别这次就先不介绍了,等下次有时间再做详细的介绍。

PagerAdapter主要是viewpager的适配器,而viewPager则也是在android.support.v4扩展包中新添加的一个强大的控件,可以实现控件的滑动效果,比如咱们在软件中常见的广告栏的滑动效果,用viewPager就可以实现。今天主要介绍如何使用viewPagr并重写PagerAdapter实现常见广告栏的滑动效果。

PagerAdapter用法简介

首先,如果继承pageradapter,至少必须重写下面的四个方法

      1. instantiateItem(ViewGroup, int)

      2. destroyItem(ViewGroup, int, Object)

      3. getCount()

      4. isViewFromObject(View, Object)

下面我们以代码的形式,说明这四个方法的含义以及如何使用

private class ViewPagerAdapter extends PagerAdapter {

// 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量

@Override

public int getCount() {

return images.size();

}

// 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0 == arg1;

}

// PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁

@Override

public void destroyItem(ViewGroup view, int position, Object object) {

view.removeView(images.get(position));

}

// 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可

@Override

public Object instantiateItem(ViewGroup view, int position) {

view.addView(images.get(position));

return images.get(position);

}

}

实现了这四个方法,就可以实现滑动的效果了。

android仿Adapter实现自定义PagerAdapter

最近在开发中,为增加PagerAdapter的可用性与可读性,自定义了一下PagerAdapter

public abstract class EjBasePagerAdapter<T> extends PagerAdapter {

protected List<T> list;

protected SparseArray<EjBasePagerHolder<T>> sparseArray;

public EjBasePagerAdapter(List<T> list){

this.list = list;

sparseArray = new SparseArray<>();

}

@Override

public int getCount() {

return list.size();

}

public String getIcon(int position){

return null;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

EjBasePagerHolder<T> holder = sparseArray.get(getSparsePosition(position));

if(null == holder){

holder = onBundHolder(container);

holder.setPosition(position);

holder.bindDada(list.get(position),position);

sparseArray.put(getSparsePosition(position),holder);

}

View view = holder.itemView;

container.addView(view);

return view;

}

@Override

public void notifyDataSetChanged() {

sparseArray.clear();

super.notifyDataSetChanged();

}

protected int getSparsePosition(int position){

return (position+10)*2;

}

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView((View) object);

}

protected View inflate(int resorce, ViewGroup viewGroup) {

return LayoutInflater.from(viewGroup.getContext()).inflate(resorce, viewGroup, false);

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

protected abstract EjBasePagerHolder<T> onBundHolder(ViewGroup container);

public void onDestroy(){

}

public void onActivityResult(int requestCode, int resultCode, Intent data) {

}

protected abstract class EjBasePagerHolder<D>{

/**上下文*/

protected Context mContext;

private int position;

SparseArray<View> sparseArray;

View itemView;

protected EjBasePagerHolder(View itemView){

this.itemView = itemView;

this.mContext = itemView.getContext();

sparseArray = new SparseArray<>();

initView();

}

public abstract void initView();

public View findViewById(int id){

View view = sparseArray.get(id);

if(null == view){

view = itemView.findViewById(id);

sparseArray.append(id,view);

}

return view;

}

public abstract void bindDada(D t,int position);

public void onActivityResult(int requestCode, int resultCode, Intent data) {

}

public void setPosition(int position) {

this.position = position;

}

public int getPosition() {

return position;

}

public void onDestroy(){

sparseArray.clear();

}

}

}

简单用法

public class EjMainFmtBannerPagerAdapter extends EjBasePagerAdapter<EjMainFragmentDataBean>{

public EjMainFmtBannerPagerAdapter(List<EjMainFragmentDataBean> list) {

super(list);

}

@Override

protected EjBasePagerHolder<EjMainFragmentDataBean> onBundHolder(ViewGroup container) {

return new EjBasePagerHolder<EjMainFragmentDataBean>(LayoutInflater.from(container.getContext()).inflate(R.layout.ejmain_item_fmt_banner,null)) {

private ImageView ejmain_iv_banner;

@Override

public void initView() {

ejmain_iv_banner = (ImageView)findViewById(R.id.ejmain_iv_banner);

}

@Override

public void bindDada(EjMainFragmentDataBean t, int position) {

GlidUtil.loadUrl(t.img1,ejmain_iv_banner,mContext);

}

};

}

}

总结

以上是 android仿Adapter实现自定义PagerAdapter方法示例 的全部内容, 来源链接: utcz.com/z/356298.html

回到顶部