欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年11月16日 11:57:39   作者:君莫醉  
這篇文章主要給大家介紹了關(guān)于android仿Adapter實(shí)現(xiàn)自定義PagerAdapter的相關(guān)資料,文中詳細(xì)介紹了關(guān)于PagerAdapter的用法,對(duì)大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

PagerAdapter簡(jiǎn)介

PagerAdapter是android.support.v4包中的類,它的子類有FragmentPagerAdapter, FragmentStatePagerAdapter,這兩個(gè)adapter都是Fragment的適配器,用于實(shí)現(xiàn)Fragment的滑動(dòng)效果,這兩個(gè)adapter的使用和區(qū)別這次就先不介紹了,等下次有時(shí)間再做詳細(xì)的介紹。

PagerAdapter主要是viewpager的適配器,而viewPager則也是在android.support.v4擴(kuò)展包中新添加的一個(gè)強(qiáng)大的控件,可以實(shí)現(xiàn)控件的滑動(dòng)效果,比如咱們?cè)谲浖谐R姷膹V告欄的滑動(dòng)效果,用viewPager就可以實(shí)現(xiàn)。今天主要介紹如何使用viewPagr并重寫PagerAdapter實(shí)現(xiàn)常見廣告欄的滑動(dòng)效果。

PagerAdapter用法簡(jiǎn)介

首先,如果繼承pageradapter,至少必須重寫下面的四個(gè)方法

      1. instantiateItem(ViewGroup, int)

      2. destroyItem(ViewGroup, int, Object)

      3. getCount()

      4. isViewFromObject(View, Object)

下面我們以代碼的形式,說明這四個(gè)方法的含義以及如何使用

private class ViewPagerAdapter extends PagerAdapter { 
 
    // 獲取要滑動(dòng)的控件的數(shù)量,在這里我們以滑動(dòng)的廣告欄為例,那么這里就應(yīng)該是展示的廣告圖片的ImageView數(shù)量 
    @Override 
    public int getCount() { 
      return images.size(); 
    } 
 
    // 來判斷顯示的是否是同一張圖片,這里我們將兩個(gè)參數(shù)相比較返回即可 
    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
      return arg0 == arg1; 
    } 
 
    // PagerAdapter只緩存三張要顯示的圖片,如果滑動(dòng)的圖片超出了緩存的范圍,就會(huì)調(diào)用這個(gè)方法,將圖片銷毀 
    @Override 
    public void destroyItem(ViewGroup view, int position, Object object) { 
      view.removeView(images.get(position)); 
    } 
 
    // 當(dāng)要顯示的圖片可以進(jìn)行緩存的時(shí)候,會(huì)調(diào)用這個(gè)方法進(jìn)行顯示圖片的初始化,我們將要顯示的ImageView加入到ViewGroup中,然后作為返回值返回即可 
    @Override 
    public Object instantiateItem(ViewGroup view, int position) { 
      view.addView(images.get(position)); 
      return images.get(position); 
    } 
  } 

實(shí)現(xiàn)了這四個(gè)方法,就可以實(shí)現(xiàn)滑動(dòng)的效果了。

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();
  }
 }
}

簡(jiǎn)單用法

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é)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Android手機(jī)顯示多彩霓虹燈效果

    Android手機(jī)顯示多彩霓虹燈效果

    這篇文章主要為大家詳細(xì)介紹了Android手機(jī)顯示多彩霓虹燈效果的小實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • android通過jxl讀excel存入sqlite3數(shù)據(jù)庫(kù)

    android通過jxl讀excel存入sqlite3數(shù)據(jù)庫(kù)

    本文主要介紹了android通過jxl去讀excel的內(nèi)容,然后存入sqlite3數(shù)據(jù)庫(kù)表,需要用到j(luò)xl的jar包和sqlite 的jar包,圖片是excel的數(shù)據(jù)格式,需要的朋友可以參考下
    2014-03-03
  • Android開發(fā)強(qiáng)制橫屏和強(qiáng)制豎屏設(shè)置實(shí)例代碼

    Android開發(fā)強(qiáng)制橫屏和強(qiáng)制豎屏設(shè)置實(shí)例代碼

    本篇文章主要介紹了Android開發(fā)強(qiáng)制橫屏和強(qiáng)制豎屏設(shè)置實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Android自定義View之漸變色折線圖的實(shí)現(xiàn)

    Android自定義View之漸變色折線圖的實(shí)現(xiàn)

    折線圖的實(shí)現(xiàn)方法在github上有很多開源的程序,但是對(duì)于初學(xué)者來講,簡(jiǎn)單一點(diǎn)的教程可能更容易入門,下面這篇文章主要給大家介紹了關(guān)于Android自定義View之漸變色折線圖的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Android移動(dòng)應(yīng)用開發(fā)指南之六種布局詳解

    Android移動(dòng)應(yīng)用開發(fā)指南之六種布局詳解

    Android應(yīng)用界面要美觀好看,就需要運(yùn)用到一定的布局技術(shù),Android布局是不可忽視的,是android應(yīng)用界面開發(fā)的重要一環(huán),這篇文章主要給大家介紹了關(guān)于Android移動(dòng)應(yīng)用開發(fā)指南之六種布局的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Android實(shí)現(xiàn)拼多多地址選擇器

    Android實(shí)現(xiàn)拼多多地址選擇器

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)拼多多地址選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • android scrollview 滑動(dòng)到頂端或者指定位置的實(shí)現(xiàn)方法

    android scrollview 滑動(dòng)到頂端或者指定位置的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猘ndroid scrollview 滑動(dòng)到頂端或者指定位置的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Android 進(jìn)程間通信AIDL使用詳解

    Android 進(jìn)程間通信AIDL使用詳解

    本篇文章主要介紹了Android 進(jìn)程間通信AIDL使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Android新浪微博下拉刷新(最新消息顯示在最上面)

    Android新浪微博下拉刷新(最新消息顯示在最上面)

    查看最新消息要用到類似新浪微博下拉刷新,想必這個(gè)功能很多的朋友都會(huì)使用吧,下面與大家分享下具體的實(shí)現(xiàn)方法,感興趣的朋友可以參考下哈
    2013-05-05
  • Android監(jiān)聽鍵盤狀態(tài)獲取鍵盤高度的實(shí)現(xiàn)方法

    Android監(jiān)聽鍵盤狀態(tài)獲取鍵盤高度的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Android監(jiān)聽鍵盤狀態(tài)獲取鍵盤高度的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論