国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android仿Adapter實(shí)現(xiàn)自定義PagerAdapter方法示例

2019-10-22 18:23:05
字體:
供稿:網(wǎng)友

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)的支持。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌江| 颍上县| 利津县| 来凤县| 乌鲁木齐县| 屏南县| 多伦县| 泰来县| 宁陕县| 恩施市| 黔江区| 报价| 岳阳市| 泸定县| 正阳县| 新兴县| 佛冈县| 太谷县| 察雅县| 田阳县| 绥芬河市| 临澧县| 宜春市| 麻栗坡县| 阳曲县| 朔州市| 闽清县| 双柏县| 工布江达县| 大渡口区| 泊头市| 栖霞市| 左云县| 桓台县| 柞水县| 仁布县| 喜德县| 丰顺县| 廊坊市| 永修县| 福州市|