• 其简单的通用适配器的定义


    连接器android频繁使用,像ListView。GridView,下拉框。。。它们相对频繁使用,

    这个博客描述了一个通用适配器。尽管相对简单的。但相对较大的有用。(没有人去创造与适配器)

    这个列子创建了一个虚拟的类,在使用时需要被继承,对应的方法。

    public abstract class SimpleBaseAdapter<T> extends BaseAdapter{
        //调用类传入的Context
        Context context
        //须要的数据,使用泛型;
        List<T> data;
    
        //构造方法。传入context和数据
        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;
        }
    
        //继承类所须要实现的方法,获取列表项的布局id
        public abstract int getItemRsouce();
        //继承类所须要实现的方法。获取列表项的view
        public abstract View getItemView(int position,View convertView,ViewHolder holder);
    
        //适配器中最重要的方法,之所以返回view调用getItemView()这种方法
        //是由于返回的view中的子view须要依据实现类中view的id确认
        @SuppressWarnings("unchecked")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView == null) {
                convertView = View.inflate(context, getItemRsouce(), null);
                holder = new ViewHolder(convertView);
                convertView.setTag(holder);
            }
            else{
                holder = (ViewHolder) convertView.getTag();
            }
    
            return getItemView(position, convertView, holder);
        }
        //一种新的ViewHolder的写法,之所以这么写。是为了方便
        //实现类获取ConvertView中的子view 。HolderView的缓存机制
        //使用SparseArray进行缓存
        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(v == null) {
                    v = convertView.findViewById(resId);
                    views.put(resId, v);
                }
                return (T) v;
            }
        }
    }
    SimpleBaseAdapter事实上就是对适配器的一种抽象,而且这个抽象类的不同表现用抽象方法

    实现。由于实现类必需要实现抽象方法(也能够说实现类是依据抽象方法表现出不同的属性)

    SimpleBaseAdapter的实现类:

    public class myAdapter extends SimpleBaseAdapter<String> {
        public myAdapter(Context context,List<String> data){
            super(context, data);
        }
        @Override
        public int getItemRsouce() {
            return R.layout.list_item;  //返回次实现类的列表item的xml文件id
        }
        //依据id获取view(每一个实现类的id都不一样)
        @Override
        public View getItemView(final int position, View convertView, ViewHolder holder) {
            TextView tv = holder.getView(R.id.title);
            tv.setText((String) getItem(position));
            Button btn = holder.getView(R.id.btn);
            btn.setText("选择");
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(myAdapter.this.context, "" + position, Toast.LENGTH_SHORT).show();
                }
            });
    
            return convertView;
        }
    }


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    一文读懂快速排序
    15道APP测试面试题分享,助攻你的面试
    APP测试之使用ADB可能遇到的错误及解决办法
    APP测试之Monkey压力测试(二)
    APP测试之Monkey压力测试(一)
    APP日志文件抓取及分析
    Linux环境安装python3
    visualvm 插件 visual gc 使用介绍
    设计模式之状态
    【深入理解JVM】:Java内存模型JMM
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4869085.html
Copyright © 2020-2023  润新知