Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發技巧——PagerAdapter的再次簡單封裝

Android開發技巧——PagerAdapter的再次簡單封裝

編輯:關於Android編程

這次再對內容為View的ViewPager的適配器PagerAdapter進行簡單的封裝,支持List數據和SparseArray的數據,帶更新視圖功能。

首先,先貼上最上面的抽象類代碼:

/*
 * Date: 14-8-18
 * Project: Access-Control-V2
 */
package cn.irains.access_control_v2.common;

import android.support.v4.view.PagerAdapter;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;

/**
 * 抽象的PagerAdapter實現類,封裝了內容為View的公共操作.
 * Author: msdx ([email protected])
 * Time: 14-8-18 下午2:34
 */
public abstract class AbstractViewPagerAdapter extends PagerAdapter {
    protected SparseArray mViews;

    public AbstractViewPagerAdapter() {
        mViews = new SparseArray();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = mViews.get(position);
        if (view == null) {
            view = newView(position);
            mViews.put(position, view);
        }
        container.addView(view);
        return view;
    }

    public abstract View newView(int position);

    public void notifyUpdateView(int position) {
        View view = updateView(mViews.get(position), position);
        mViews.put(position, view);
        notifyDataSetChanged();
    }

    public View updateView(View view, int position) {
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(mViews.get(position));
    }

}

這裡只對View相關的操作進行封裝,不涉及任何數據,並增加了兩個方法,一個是notifyUpdateView(int position),調用它之後將會去更新指定位置的視圖。另一個方法是public View updateView(View view, int position),在這裡進行更新視圖的具體操作。


接下來看數據為List的封裝,代碼如下:

/*
 * Date: 14-8-18
 * Project: Access-Control-V2
 */
package cn.irains.access_control_v2.common;

import android.view.View;

import java.util.List;

/**
 * 抽象的PagerAdapter實現類,封裝了內容為View,數據為List類型的適配器實現.
 * Author: msdx ([email protected])
 * Time: 14-8-18 下午2:34
 */
public abstract class AbstractPagerListAdapter extends AbstractViewPagerAdapter {
    protected List mData;

    public AbstractPagerListAdapter(List data) {
        mData = data;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    public abstract View newView(int position);

    public T getItem(int position) {
        return mData.get(position);
    }
}

方法還是和上篇文章基本一樣的,只是有些方法抽取到父類中,然後在該類中繼承。

同樣,數據為SparseArray的適配器封裝類代碼與其相似,如下:

/*
 * Date: 14-8-18
 * Project: Access-Control-V2
 */
package cn.irains.access_control_v2.common;

import android.util.SparseArray;
import android.view.View;

/**
 * 抽象的PagerAdapter實現類,封裝了內容為View,數據為SparseArray類型的適配器實現.
 * Author: msdx ([email protected])
 * Time: 14-8-18 下午2:34
 */
public abstract class AbstractPagerSparseAdapter extends AbstractViewPagerAdapter {
    protected SparseArray mData;

    public AbstractPagerSparseAdapter(SparseArray data) {
        mData = data;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    public abstract View newView(int position);

    public T getItem(int position) {
        return mData.valueAt(position);
    }
}

使用時,僅需要繼承並實現newView(int position)方法即可。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved