zoukankan      html  css  js  c++  java
  • 02-14Android学习进度报告十四

            今天我学习了关于构建一个可复用的自定义BaseAdapter的知识。

    首先将Entity设置成泛型

    代码示例:

    public class MyAdapter<T> extends BaseAdapter {
    
        private Context mContext;
        private LinkedList<T> mData;
    
        public MyAdapter() {
        }
    
        public MyAdapter(LinkedList<T> mData, Context mContext) {
            this.mData = mData;
            this.mContext = mContext;
        }
    
        @Override
        public int getCount() {
            return mData.size();
        }
    
        @Override
        public Object getItem(int position) {
            return null;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;
            if (convertView == null) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, parent, false);
                holder = new ViewHolder();
                holder.img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
                holder.txt_content = (TextView) convertView.findViewById(R.id.txt_content);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.img_icon.setImageResource(mData.get(position).getImgId());
            holder.txt_content.setText(mData.get(position).getContent());
            return convertView;
        }
    
        //添加一个元素
        public void add(T data) {
            if (mData == null) {
                mData = new LinkedList<>();
            }
            mData.add(data);
            notifyDataSetChanged();
        }
    
        //往特定位置,添加一个元素
        public void add(int position,T data){
            if (mData == null) {
                mData = new LinkedList<>();
            }
            mData.add(position, data);
            notifyDataSetChanged();
        }
    
        public void remove(T data) {
            if(mData != null) {
                mData.remove(data);
            }
            notifyDataSetChanged();
        }
    
        public void remove(int position) {
            if(mData != null) {
                mData.remove(position);
            }
            notifyDataSetChanged();
        }
    
        public void clear() {
            if(mData != null) {
                mData.clear();
            }
            notifyDataSetChanged();
        }
    
        private class ViewHolder {
            ImageView img_icon;
            TextView txt_content;
        }
    
    }

    然后是将ViewHolder类进行升级改造

    代码示例如下:

    public static class ViewHolder {
    
        private SparseArray<View> mViews;   //存储ListView 的 item中的View
        private View item;                  //存放convertView
        private int position;               //游标
        private Context context;            //Context上下文
    
        //构造方法,完成相关初始化
        private ViewHolder(Context context, ViewGroup parent, int layoutRes) {
            mViews = new SparseArray<>();
            this.context = context;
            View convertView = LayoutInflater.from(context).inflate(layoutRes, parent,false);
            convertView.setTag(this);
            item = convertView;
        }
    
        ImageView img_icon;
        TextView txt_content;
    }

    这就是今日所学。

  • 相关阅读:
    Redis:五、Redis持久化
    Redis:四、jedis连接redis服务器
    Redis:三、Key和Value
    php 拆分的 string里包含“2”或“1”符号(“”或者“”)
    清除float浮动
    js 判断数据类型
    form表单里target属性(在新窗口打开页面)
    think PHP5实现文件下载
    echarts自定义提示框内容
    Chrome浏览器不支持小于12px的字体大小
  • 原文地址:https://www.cnblogs.com/yang2000/p/12323586.html
Copyright © 2011-2022 走看看