最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

PagerAdapter簡介

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

PagerAdapter主要是viewpager的適配器,而viewPager則也是在android.support.v4擴展包中新添加的一個強大的控件,可以實現(xiàn)控件的滑動效果,比如咱們在軟件中常見的廣告欄的滑動效果,用viewPager就可以實現(xiàn)。今天主要介紹如何使用viewPagr并重寫PagerAdapter實現(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ù)量,在這里我們以滑動的廣告欄為例,那么這里就應該是展示的廣告圖片的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)); 
    } 
 
    // 當要顯示的圖片可以進行緩存的時候,會調(diào)用這個方法進行顯示圖片的初始化,我們將要顯示的ImageView加入到ViewGroup中,然后作為返回值返回即可 
    @Override 
    public Object instantiateItem(ViewGroup view, int position) { 
      view.addView(images.get(position)); 
      return images.get(position); 
    } 
  } 

實現(xiàn)了這四個方法,就可以實現(xiàn)滑動的效果了。

android仿Adapter實現(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)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Android使用AudioManager修改系統(tǒng)音量的方法

    Android使用AudioManager修改系統(tǒng)音量的方法

    這篇文章主要介紹了Android使用AudioManager修改系統(tǒng)音量的方法,結(jié)合實例形式分析了AudioManager調(diào)節(jié)音量的常用方法及相關(guān)使用技巧,需要的朋友可以參考下
    2016-08-08
  • flutter實現(xiàn)切換頁面緩存

    flutter實現(xiàn)切換頁面緩存

    這篇文章主要為大家詳細介紹了flutter實現(xiàn)切換頁面緩存,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • AndroidStudio項目制作倒計時模塊的方法

    AndroidStudio項目制作倒計時模塊的方法

    本篇文章主要介紹了AndroidStudio項目制作倒計時模塊的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Android筆記設計范例之日記APP實現(xiàn)全流程

    Android筆記設計范例之日記APP實現(xiàn)全流程

    這篇文章主要介紹了Android筆記設計范例之日記APP實現(xiàn)全流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • Android Studio手動打包的教程圖解

    Android Studio手動打包的教程圖解

    項目寫完了,現(xiàn)在需要把應用上傳到市場上面,那么怎么把項目打包成apk呢?下面腳本之家小編給大家?guī)砹薃ndroid Studio手動打包的方法,一起看看吧
    2018-07-07
  • Android垂直滾動控件ScrollView使用方法詳解

    Android垂直滾動控件ScrollView使用方法詳解

    這篇文章主要為大家詳細介紹了Android垂直滾動控件ScrollView的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解Android中實現(xiàn)Redux方法

    詳解Android中實現(xiàn)Redux方法

    本篇文章給大家通過代碼實例教學Android中實現(xiàn)Redux的方法,有需要的朋友跟著參考下吧。
    2018-01-01
  • Android中String與int相互轉(zhuǎn)換

    Android中String與int相互轉(zhuǎn)換

    大家好,本篇文章主要講的是Android中String與int相互轉(zhuǎn)換,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android波紋擴散效果之仿支付寶咻一咻功能實現(xiàn)波紋擴散特效

    Android波紋擴散效果之仿支付寶咻一咻功能實現(xiàn)波紋擴散特效

    這篇文章主要介紹了Android波紋擴散效果之仿支付寶咻一咻功能實現(xiàn)波紋擴散特效的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Android實現(xiàn)簡單的答題系統(tǒng)

    Android實現(xiàn)簡單的答題系統(tǒng)

    這篇文章主要為大家詳細介紹了Android實現(xiàn)簡單的答題系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

夏河县| 隆昌县| 穆棱市| 柳河县| 高清| 高尔夫| 七台河市| 陆河县| 娄底市| 上思县| 察隅县| 革吉县| 北宁市| 洮南市| 应城市| 新巴尔虎左旗| 珲春市| 泽库县| 聂拉木县| 宁津县| 班玛县| 镇赉县| 桃源县| 定边县| 同江市| 定远县| 乌鲁木齐县| 阜南县| 鹰潭市| 宿迁市| 民县| 宝兴县| 女性| 边坝县| 财经| 两当县| 宜兰县| 二连浩特市| 边坝县| 祁连县| 栖霞市|