• [借鉴] Android简便通用的SimpleBaseAdapter


    public abstract class SimpleBaseAdapter<T> extends BaseAdapter {
    
        protected Context context;
        protected List<T> data;
    
        public SimpleBaseAdapter(Context context, List<T> data) {
            this.context = context;
            this.data = data == null ? new ArrayList<T>() : data;
        }
    
        @Override
        public int getCount() {
            return data.size();
        }
    
        @Override
        public Object getItem(int position) {
            if (position >= data.size())
                return null;
            return data.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        /**
         * 该方法需要子类实现,需要返回item布局的resource id
         * 
         * @return
         */
        public abstract int getItemResource();
    
        /**
         * 使用该getItemView方法替换原来的getView方法,需要子类实现
         * 
         * @param position
         * @param convertView
         * @param parent
         * @param holder
         * @return
         */
        public abstract View getItemView(int position, View convertView, ViewHolder holder);
    
        @SuppressWarnings("unchecked")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (null == convertView) {
                convertView = View.inflate(context, getItemResource(), null);
                holder = new ViewHolder(convertView);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            return getItemView(position, convertView, holder);
        }
    
        public class ViewHolder {
            private SparseArray<View> views = new SparseArray<View>();
            private View convertView;
            
            public ViewHolder(View convertView) {
                this.convertView = convertView;
            }
    
            @SuppressWarnings("unchecked")
            public <T extends View> T getView(int resId) {
                View v = views.get(resId);
                if (null == v) {
                    v = convertView.findViewById(resId);
                    views.put(resId, v);
                }
                return (T) v;
            }
        }
    
        public void addAll(List<T> elem) {
            data.addAll(elem);
            notifyDataSetChanged();
        }
        
        public void remove(T elem) {
            data.remove(elem);
            notifyDataSetChanged();
        }
    
        public void remove(int index) {
            data.remove(index);
            notifyDataSetChanged();
        }
    
        public void replaceAll(List<T> elem) {
            data.clear();
            data.addAll(elem);
            notifyDataSetChanged();
        }
    }
    public class TestFoodListAdapter extends SimpleBaseAdapter<String> {
    
        public TestFoodListAdapter(Context context, List<String> data) {
            super(context, data);
        }
    
        @Override
        public int getItemResource() {
            return R.layout.listitem_test;
        }
    
        @Override
        public View getItemView(int position, View convertView, ViewHolder holder) {
            TextView text = holder.getView(R.id.text);
            text.setText(getItem(position));
            return convertView;
        }
    }
  • 相关阅读:
    2016年终总结
    cocos2dx-3.x 导出自定义类到 lua 过程详解
    Direct3D11学习:(九)绘制基本几何体
    Direct3D11学习:(八)Effects介绍
    Direct3D11学习:(七)绘图基础——彩色立方体的绘制
    Direct3D11学习:(六)渲染管线
    Direct3D11学习:(五)演示程序框架
    Direct3D11学习:(四)计时和动画
    常见 Windows 函数列表
    驱动下通过进程PID获得进程名 (动态获取ImageFileName在EPROCESS结构体中的相对偏移)
  • 原文地址:https://www.cnblogs.com/qianyukun/p/5098006.html
Copyright © 2020-2023  润新知