• 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;
    }

    这就是今日所学。

  • 相关阅读:
    代码动态设置edittext输入类型为密码类型
    java android使用Gson解析泛型json数据
    你必须要懂的APK瘦身知识
    记录一下寄几个儿的greendao数据库升级,可以说是非常菜鸡了嗯
    (通用)Android App代码混淆终极解决方案【转】
    android设置GridView高度自适应,实现全屏铺满效果
    XML解析——Java中XML的四种解析方式
    The SDK platform-tools version ((23)) is too old to check APIs compiled with API 26;
    通过URI返回File文件
    傻瓜式禅道配置
  • 原文地址:https://www.cnblogs.com/yang2000/p/12323586.html
Copyright © 2020-2023  润新知