zoukankan      html  css  js  c++  java
  • [借鉴] 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;
        }
    }
  • 相关阅读:
    HTML总结
    js五角星评分特效
    正则表达式
    C#文件路径的写法
    vs2010发布网站
    INI文件阅读器
    .net读取xml文件中文乱码问题解决办法
    js利用定时器动态改变层大小
    c#中ref和out的用法
    分享一篇关于C#对文件操作的日志,方法很全
  • 原文地址:https://www.cnblogs.com/qianyukun/p/5098006.html
Copyright © 2011-2022 走看看