PagerAdapter簡介
PagerAdapter是android.support.v4包中的類,它的子類有FragmentPagerAdapter, FragmentStatePagerAdapter,這兩個adapter都是Fragment的適配器,用于實(shí)現(xiàn)Fragment的滑動效果,這兩個adapter的使用和區(qū)別這次就先不介紹了,等下次有時間再做詳細(xì)的介紹。
PagerAdapter主要是viewpager的適配器,而viewPager則也是在android.support.v4擴(kuò)展包中新添加的一個強(qiáng)大的控件,可以實(shí)現(xiàn)控件的滑動效果,比如咱們在軟件中常見的廣告欄的滑動效果,用viewPager就可以實(shí)現(xiàn)。今天主要介紹如何使用viewPagr并重寫PagerAdapter實(shí)現(xiàn)常見廣告欄的滑動效果。
PagerAdapter用法簡介
首先,如果繼承pageradapter,至少必須重寫下面的四個方法
	      1. instantiateItem(ViewGroup, int)
	      2. destroyItem(ViewGroup, int, Object)
	      3. getCount()
	      4. isViewFromObject(View, Object)
下面我們以代碼的形式,說明這四個方法的含義以及如何使用
private class ViewPagerAdapter extends PagerAdapter {      // 獲取要滑動的控件的數(shù)量,在這里我們以滑動的廣告欄為例,那么這里就應(yīng)該是展示的廣告圖片的ImageView數(shù)量     @Override     public int getCount() {       return images.size();     }      // 來判斷顯示的是否是同一張圖片,這里我們將兩個參數(shù)相比較返回即可     @Override     public boolean isViewFromObject(View arg0, Object arg1) {       return arg0 == arg1;     }      // PagerAdapter只緩存三張要顯示的圖片,如果滑動的圖片超出了緩存的范圍,就會調(diào)用這個方法,將圖片銷毀     @Override     public void destroyItem(ViewGroup view, int position, Object object) {       view.removeView(images.get(position));     }      // 當(dāng)要顯示的圖片可以進(jìn)行緩存的時候,會調(diào)用這個方法進(jìn)行顯示圖片的初始化,我們將要顯示的ImageView加入到ViewGroup中,然后作為返回值返回即可     @Override     public Object instantiateItem(ViewGroup view, int position) {       view.addView(images.get(position));       return images.get(position);     }   } 實(shí)現(xiàn)了這四個方法,就可以實(shí)現(xiàn)滑動的效果了。
android仿Adapter實(shí)現(xiàn)自定義PagerAdapter
最近在開發(fā)中,為增加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);   }  }; }}總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選