zoukankan      html  css  js  c++  java
  • Android开发技巧——PagerAdapter再简单的包

    再次内容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 (645079761@qq.com)
     * Time: 14-8-18 下午2:34
     */
    public abstract class AbstractViewPagerAdapter extends PagerAdapter {
        protected SparseArray<View> mViews;
    
        public AbstractViewPagerAdapter() {
            mViews = new SparseArray<View>();
        }
    
        @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 (645079761@qq.com)
     * Time: 14-8-18 下午2:34
     */
    public abstract class AbstractPagerListAdapter<T> extends AbstractViewPagerAdapter {
        protected List<T> mData;
    
        public AbstractPagerListAdapter(List<T> 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 (645079761@qq.com)
     * Time: 14-8-18 下午2:34
     */
    public abstract class AbstractPagerSparseAdapter<T> extends AbstractViewPagerAdapter {
        protected SparseArray<T> mData;
    
        public AbstractPagerSparseAdapter(SparseArray<T> 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)该方法可以是。

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    【强转】QEMU+GDB调试linux内核全过程
    从上往下打印二叉树
    栈的压入、弹出序列
    包含main函数的栈
    顺时针打印矩阵
    Linux终端美化
    Linux 终端美化
    KDE桌面环境自带的Konsole终端配置
    KDE美化及常用设置
    KDE常用桌面插件总结
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4776546.html
Copyright © 2011-2022 走看看