zoukankan      html  css  js  c++  java
  • Android中的Adapter总结

    一、Adapter的介绍

    An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set.

    一个Adapter是AdapterView视图与数据之间的桥梁,Adapter提供对数据的访问,也负责为每一项数据产生一个对应的View。其作用如下图所示:

    二、Adapter的继承关系

    有两个adapter的体系,如下:

    1、

    2、

    三、Adapter中的方法

    在实际应用中,adapter的继承体系应用的更为广泛,所以,要对Adapter的方法有所了解

    public interface Adapter {  
        // 为了避免产生大量的View浪费内存,在Android中,AdapterView中的View是可回收的使用的。比如你有100项数据要显示,而你的屏幕一次只能显示10条数据,则  
        // 只产生10个View,当往下拖动要显示第11个View时,会把第1个View的引用传递过去,更新里面的数据再显示,也就是说View可重用,只是更新视图中的数据用于显示新  
        // 的一项,如果一个视图的视图类型是IGNORE_ITEM_VIEW_TYPE的话,则此视图不会被重用  
        static final int IGNORE_ITEM_VIEW_TYPE = AdapterView.ITEM_VIEW_TYPE_IGNORE;  
      
        static final int NO_SELECTION = Integer.MIN_VALUE;  
      
        // 注册一个Observer,当Adapter所表示的数据改变时会通知它,DataSetObserver是一个抽象类,定义了两个方法:onChanged与onInvalidated  
        void registerDataSetObserver(DataSetObserver observer);  
      
        // 取消注册一个Observer  
        void unregisterDataSetObserver(DataSetObserver observer);  
      
        // 所表示的数据的项数  
        int getCount();  
      
        // 返回指定位置的数据项  
        Object getItem(int position);  
      
        // 返回指定位置的数据项的ID  
        long getItemId(int position);  
      
        // 表示所有数据项的ID是否是稳定的,在BaseAdapter中默认返回了false,假设是不稳定的,在CursorAdapter中返回了true,Cursor中的_ID是不变的  
        boolean hasStableIds();  
      
        // 为每一个数据项产生相应的视图  
        View getView(int position, View convertView, ViewGroup parent);  
      
        // 获得相应位置的这图类型  
        int getItemViewType(int position);  
      
        // getView可以返回的View的类型数量。(在HeaderViewListAdapter中可以包含Header和Footer,getView可以返回Header、Footer及Adapter  
        // 中的视图,但其getViewTypeCount的实现只是调用了内部Adapter的的getViewTypeCount,忽略了Header、Footer中的View  
        // Type,不懂。  
        int getViewTypeCount();  
      
        //是否为空  
        boolean isEmpty();  
    }  

    转自:http://blog.csdn.net/lonelyroamer/article/details/7525834

  • 相关阅读:
    线上环境 Linux 系统调用追踪
    深挖前端 JavaScript 知识点 —— 史上最全面、最详细的 Cookie 总结
    揭秘 vivo 如何打造千万级 DAU 活动中台
    我和大厂Offer有个约会之padding-top的百分比值参考对象竟是父级元素的宽度
    【Electron Playground 系列】文件下载篇
    [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)
    【人生苦短,我学 Python】基础篇——基本语句(Day5)
    P3224 [HNOI2012]永无乡
    P2146 [NOI2015]软件包管理器
    P3203 [HNOI2010]弹飞绵羊
  • 原文地址:https://www.cnblogs.com/sage-blog/p/4072473.html
Copyright © 2011-2022 走看看