• 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)该方法可以是。

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

  • 相关阅读:
    Dynamics CRM 365 查询安全角色的具体权限明细
    Dynamics CRM 365 JS易错备忘录
    Dynamics CRM 365 9.0版本,在活动增加phonecall和task的时候,在postCreate同步触发的时候拿不到regardingobjectid
    Dynamics 365 通过插件中的retrievemultiple消息来过滤产品视图
    【短视频】达人是什么?
    跨境电商业务知识
    【电商行业】商品标签有哪些?
    二维高斯核函数
    php模拟发送post请求
    scp
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4776546.html
Copyright © 2020-2023  润新知