• Adapter的实现


    Adapter概念:

    Adapter是连接后端数据和前端显示的适配接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView, GridView)等地方都需要用到Adapter。相当于ios里面tableView,collection的DataSource.我们在使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 Base Adapter,Impleader,Adapter,Counteradaptation等。

    常用Adapter:

    BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
    ArrayAdapter支持泛型操作,最为简单,只能展示一行字;
    SimpleAdapter有最好的扩充性,可以自定义出各种效果;
    SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。

    在此对BaseAdapter用法进行详细介绍。

    1. 首先创建一个类继承BaseAdapter
    public class ItemBaseAdapter extends BaseAdapter {
        // data  要显示的数据源
        public List<Item> itemList;
        private LayoutInflater inflater;
        //init 构造函数初始化 context为当前的上下文
        public ItemBaseAdapter(Context context, List<Item> data){
        this.inflater = LayoutInflater.from(context);
        this.itemList = data;
        }
    }
    
    // 重写父类方法
    // 返回数据源数量
    @Override
    public int getCount() {return itemList.size();}
    
    // 返回的是该position对应的item,即获得相应数据集合中特定位置的数据项
    @Override
    public Object getItem(int position) {
        return null;
    }
    // 它返回的是该postion对应item的id, 相当于ios tableView的 indexPath
    @Override
    public long getItemId(int position) {
        return 0;
    }
    
    // 返回了每个item项所显示的view,该view在layout里自定义布局,可重用,相当于tableView自定义的cell
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //创建ViewHolder 实例并赋值
        ItemViewHolder holder = null;
        if (convertView == null) {
            holder = new ItemViewHolder();
            convertView = inflater.inflate(R.layout.item_view, null);
            holder.title = (TextView)convertView.findViewById(R.id.title);
            holder.desc = (TextView)convertView.findViewById(R.id.desc);
            holder.imageView = (ImageView)convertView.findViewById(R.id.image);
            holder.price = (TextView)convertView.findViewById(R.id.price);
           // 设置视图层次结构
            convertView.setTag(holder);
            
        } else {
            holder = (ItemViewHolder)convertView.getTag();
        }
        
        holder.title.setText(itemList.get(position).getTitle());
        holder.desc.setText(itemList.get(position).getDesc());
        holder.price.setText(price);
        String url = itemList.get(position).getCoverImageUrl();
        // MARK: inflater.getContext()获取当前的上下文
        // 用Picasso框架异步加载网络图片
        Picasso.with(inflater.getContext()).load(url).placeholder(R.drawable.placeholder).error(R.drawable.placeholder).into(holder.imageView);
        }
        return convertView;
    }
    

    2.创建ViewHolder类,属性是所有要显示在View上的控件。相当于ios里面的在storyboard里拖一个线到view上,把控件与view相关联。

    public final class ItemViewHolder {
        public TextView title;
        public TextView desc;
        public ImageView imageView;
        public TextView price;
    }
    

    4.运用BaseAdapter。
    在继承与Fragment的类里面创建BaseAdapter的实例,并传入数据源,就可以让Fragment显示自定义的布局和数据.
    // 创建ItemBaseAdapter的实例
    BaseAdapter adapter = new ItemBaseAdapter(getActivity(),items);
    // 设置gridView的adapter
    item_grid.setAdapter(adapter);

    以上就是BaseAdapter的基本使用。

  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/tilmto/p/9260093.html
Copyright © 2020-2023  润新知