zoukankan      html  css  js  c++  java
  • 万能ViewHolder和基类适配器

    package com.example.utils;
    
    import android.content.Context;
    import android.util.SparseArray;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class ViewHolder {
        private SparseArray<View> mViews;
        private int mPosition;
        private View convertView;
    
        // 需要的参数
        public ViewHolder(Context context, ViewGroup parent, int layoutId,
                int position) {
            /**
             * 进行初始化设置
             */
            mViews = new SparseArray<View>();
            mPosition = position;
            convertView = LayoutInflater.from(context).inflate(layoutId, parent,
                    false);
            convertView.setTag(this);
        }
    
        // viewHolder入口
        public static ViewHolder get(Context context, View convertView,
                ViewGroup parent, int layoutId, int position) {
            // 如果为空则new出新的
            if (convertView == null) {
                return new ViewHolder(context, parent, layoutId, position);
            } else {
                ViewHolder holder = (ViewHolder) convertView.getTag();
                //更新position
                holder.mPosition = position;
                return holder;
            }
        }
        
        /**
         * 通过id获取控件
         * @param id
         * @return
         */
        public <T extends View> T getView(int id){
            View view = mViews.get(id);
            if(view == null){
                view = convertView.findViewById(id);
                mViews.put(id, view);
            }
            return (T) view;
        } 
        
        public View getConvertView() {
            return convertView;
        }
        
        public int getPosition(){
            return mPosition;
        }
    }

    基类适配器

    package com.example.utils;
    
    import java.util.List;
    
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    
    public abstract class CommonAdapter<T> extends BaseAdapter {
        protected List<T> data;
        protected Context mContext;
        
        public CommonAdapter(List<T> data,Context mContext){
            this.data = data;
            this.mContext = mContext;
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return data.size();
        }
    
        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return data.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public abstract View getView(int position, View convertView, ViewGroup parent);
        
    
    }
    package com.example.bluetooth;
    
    import java.util.List;
    
    import com.example.utils.CommonAdapter;
    import com.example.utils.ViewHolder;
    
    
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    public class MyAdapter extends CommonAdapter<Bean>{
        
        public MyAdapter(List<Bean> data, Context mContext) {
            super(data, mContext);
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //初始化
            ViewHolder holder = ViewHolder.get(mContext, convertView, parent, R.layout.item, position);
            //设置值
            TextView name = holder.getView(R.id.item_name);
            TextView address = holder.getView(R.id.item_address);
            name.setText(data.get(position).getName());
            address.setText(data.get(position).getAddress());
            //返回注意getConvertView
            return holder.getConvertView();
        
        }
    }
  • 相关阅读:
    Cesium 模拟卫星扫描
    SQL Server配置管理器”远程过程调用失败“的问题解决
    Windows系统查看端口占用、结束进程方法和命令
    Cesium 遥感卫星影像推送效果绘制
    Nginx 发布本地后台端口
    js 产生16位随机字符串
    vscode powershell/gitbash g++ : 无法将“g++”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1
    安装Tomcat服务器以及错误汇总(tomcat8.0、jdk8)
    Windows 8及以上系统安装好SQL Server 2008之后找不到SQL Server配置管理器的问题
    mysql 利用binlog增量备份,还原实例
  • 原文地址:https://www.cnblogs.com/84126858jmz/p/5411334.html
Copyright © 2011-2022 走看看