`
苗振忠
  • 浏览: 59524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android中的Adapter 详解(二)

 
阅读更多

不论是那种适配器模式,也不管是Listview也好还是gridview也好,对他们填充数据,都是分三步走。

第一:创建一个数据填充的对象,可以是ListView, GridView, Gallery。

 listView=(ListView) findViewById(R.id.listview_simple);   

第二步:创建一个数据填充器,可以是BaseAdapter、SimpleAdapter,也可以是与数据库相关联的CursorAdapter。

例如:SimpleAdapter可以使用系统封装好的,你也可以自己去继承一个Simpleadapter,来重写其中的方法。继承 simpleadapter的好处在于,你可以对listitem中每个单一的控件设置监听事件等等一系列操作。如果用的是系统封装好的就有点爱莫能助了。

直接使用系统封装的:

    SimpleAdapter simpleAdapter = new SimpleAdapter(        
              this,       
              data,         
              R.layout.simple_item,         
              new String[] { "name", "info" },         
              new int[] { R.id.simple_name, R.id.simple_info   
           });   
    

重写系统的simpleadpter:

    public class ListSimpleAdpter extends SimpleAdapter{  
     //要使用到的数据源   
    private List<MAP><STRING, object="">> data=new ArrayList</STRING,></MAP><MAP><STRING, object="">>();   
    //填充数据的资源文件   
    private int resource;  
     private String[] from;   
    private Context context;  
     public ListSimpleAdpter(Context context, List</STRING,></MAP><MAP><STRING, object="">> data, int resource, String[] from, int[] to) {   
    super(context, data, resource, from, to);   
    this.context=context;   
    this.data=data;   
    this.resource=resource;   
    this.from=from; }   
    //item的总行数  
     @Override   
    public int getCount() {   
    // TODO Auto-generated method stub   
    return data==null?0:data.size();  
     }   
    //item对象   
    @Override   
    public Object getItem(int position) {   
    // TODO Auto-generated method stub   
    return position;  
     }  
    //item的id  
     @Override   
    public long getItemId(int position) {   
    // TODO Auto-generated method stub   
    return position;   
    }   
    //绘制每一个item   
    @Override   
    public View getView(int position, View convertView, ViewGroup parent) {  
     // TODO Auto-generated method stub   
    Holder holder = null;  
     if(convertView==null) {   
    convertView=LayoutInflater.from(context).inflate(resource, null);   
    holder=new Holder();   
    holder.imageView=(ImageView) convertView.findViewById(R.id.listitem_pic);   
    holder.title=(TextView) convertView.findViewById(R.id.listitem_title);  
     holder.content=(TextView) convertView.findViewById(R.id.listitem_content);  
     convertView.setTag(holder);   
    }else{   
    holder=(Holder) convertView.getTag();   
    }   
    holder.imageView.setImageResource(Integer.parseInt(data.get(position).get(from[0]).toString()));  
     holder.title.setText(data.get(position).get(from[1]).toString());   
    holder.content.setText(data.get(position).get(from[2]).toString()); return convertView;  
     }     
    class Holder{   
    ImageView imageView;   
    TextView title;   
    TextView content;  
     }   
    }  
    

这里对于Adapter的优化,用的很古老的ViewHolder、ViewCache办法:

    public View getView(int position, View convertView, ViewGroup parent) {   
    // TODO Auto-generated method stub   
    Holder holder = null;   
    if(convertView==null) {   
    convertView=LayoutInflater.from(context).inflate(resource, null);   
    holder=new Holder();   
    holder.imageView=(ImageView) convertView.findViewById(R.id.listitem_pic);   
    holder.title=(TextView) convertView.findViewById(R.id.listitem_title);   
    holder.content=(TextView) convertView.findViewById(R.id.listitem_content);   
    convertView.setTag(holder);   
    }else{   
    holder=(Holder) convertView.getTag();   
    }   
    holder.imageView.setImageResource(Integer.parseInt(data.get(position).get(from[0]).toString()));   
    holder.title.setText(data.get(position).get(from[1]).toString());   
    holder.content.setText(data.get(position).get(from[2]).toString()); return convertView;   
    }     
    class Holder{   
    ImageView imageView;   
    TextView title;   
    TextView content;   
    } 

或者使用HashMap做缓存的方法:

    HashMap<INTEGER, view=""> m = new HashMap<I<span id="transmark"></span>NTEGER, view="">();     
    public View getView(int position, View view, ViewGroup parent) {     
    View convertView = m.get(position);   
    if (convertView != null) {  
     return convertView;   
    } else {     
    convertView=LayoutInflater.from(context).inflate(resource, null);     
    ImageView imageView=(ImageView) convertView.findViewById(R.id.listitem_pic);     
    TextView title=(TextView) convertView.findViewById(R.id.listitem_title);     
    TextView content=(TextView) convertView.findViewById(R.id.listitem_content);      
    m.put(position, convertView);    
     }   
    }

第三步:将数据填充到对象中去

 listView.setAdapter(simpleAdapter);   

这样就完成了数据填充器的数据填充。

还有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter,
ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter.SimpleCursorTreeAdapter、
二级树相关的SimpleExpandableListAdapter、BaseExpandableListAdapter等等。
分享到:
评论

相关推荐

    android开发Adapter详解

    ### Android开发Adapter详解 #### 一、Adapter概念与作用 在Android开发中,Adapter是一种用于连接数据源和视图组件的重要桥梁。它主要用于处理数据集合与列表视图之间的交互,确保视图能够正确且高效地展示数据。...

    android adapter详解

    Android Adapter 详解 Android Adapter 是 Android 开发中一个重要的组件,负责将数据绑定到用户界面中。今天,我们将深入探讨 Android Adapter 的原理和实现方式。 什么是 Android Adapter? Android Adapter 是...

    Android Adapter详解(2)

    这篇博客“Android Adapter详解(2)”可能会深入探讨Adapter的工作原理、如何使用以及一些常见问题的解决方法。由于没有直接提供博客的具体内容,我将根据常规的Adapter知识进行详细解释。 Adapter是Android中用于将...

    Android adapter详解

    适配器(Adapter)在Android开发中是一个非常重要的概念,它主要用于处理数据源和UI组件之间的数据流动和转换。适配器作为数据和UI之间的桥梁,能够把后端数据适配到前端的显示界面,使之能够按照一定的格式显示出来...

    Android之Adapter用法总结

    #### 二、Android 中 Adapter 的类型及其特点 Android 提供了多种类型的 Adapter,每种都有其特定的应用场景和特点: 1. **BaseAdapter** - **简介**: 这是一个抽象类,提供了基本的 Adapter 方法,开发者需要...

    Android listview与adapter详解及实例代码

    在Android中,Adapter是连接数据源和视图控件(如ListView)的关键。 常见的Adapter类型有ArrayAdapter、SimpleAdapter、SimpleCursorAdapter以及BaseAdapter等。ArrayAdapter适用于绑定数组数据,SimpleAdapter...

    Android Adapter里面嵌套ListView实例详解

    Android Adapter里面嵌套ListView实例详解是Android开发中的一种常见设计,即在一个ListView中嵌套另一个ListView。这种设计可以实现复杂的列表显示,但是需要特殊处理以确保正确显示。 Android Adapter里面嵌套...

    Android各种控件详解

    在Android应用开发中,构建用户界面是至关重要的一步,它涉及到与用户交互的各种控件。以下是对Android中常见控件的详细解释: 1. **文本框(TextView)**:TextView用于展示静态文本,可以在Activity中直接创建...

    android优化技术详解

    Android 优化技术详解 Android 优化技术是指通过合理的编程和设计来提高 Android 应用程序的性能、内存和用户体验的一系列技术。下面是 Android 优化技术的详细解释: UI 布局优化 Android 的 UI 界面布局的优化...

    Android ViewPager使用详解

    **Android ViewPager 使用详解** ViewPager是Android开发中一个非常重要的组件,它允许用户通过左右滑动来切换不同的页面,常用于实现应用的滑动导航或展示多个相似内容的页面。在本篇文章中,我们将深入探讨...

    android Adapter教程

    #### 二、Android Adapter 的家族成员 Android 提供了多种类型的 Adapter 来满足不同的应用场景: - **BaseAdapter**:这是一个抽象类,提供了一套基础的 Adapter 方法,如 getCount()、getItem() 和 getItemId()...

    Android中Listview详解

    在Android开发中,ListView是一个非常重要的组件,常用于展示大量数据的列表形式。它可以根据数据的长度自动调整显示,提供良好的用户体验。以下是对ListView组件及其使用的详细解释。 首先,ListView的构成包含三...

    android核心技术与实例详解光盘源代码3

    在本资源中,我们聚焦于Android开发的核心技术和实例解析,主要涵盖了光盘源代码的第13至第18章。这些章节深入探讨了Android应用开发的关键方面,为开发者提供了丰富的学习材料。以下是对各章节内容的详细解读: 第...

    Android 蓝牙API详解

    **Android蓝牙API详解** 在Android平台上,蓝牙技术是设备间通信的重要途径,广泛应用于数据传输、设备配对、物联网(IoT)等场景。Android提供了丰富的蓝牙API,使得开发者能够轻松实现蓝牙功能,包括经典蓝牙...

    《Android应用开发详解》配套光盘之源代码

    1. **UI设计**:Android应用的用户界面是与用户交互的窗口,源代码中包含了各种布局管理器(如LinearLayout、RelativeLayout、GridLayout、ConstraintLayout)的使用示例,以及自定义View和Adapter的实现,这些都是...

    Android 应用开发详解的源码(中)

    在本资源中,"Android 应用开发详解的源码(中)" 提供了针对初学者的Android应用开发实例,涵盖了从第七到第十二部分的知识点。这些源码旨在帮助学习者深入理解Android应用程序的设计与实现。以下是这些知识点的详细...

    Android_布局详解【图文】

    Android布局详解【图文】 在Android应用开发中,布局(Layout)是构建用户界面的基础,它决定了各个组件在屏幕上的排列方式和位置。本篇将详细讲解Android中的五种主要布局:线性布局(Linear Layout)、相对布局...

    Android项目开发详解 翟大昆版

    在翟大昆版的《Android项目开发详解》代码中,读者可以找到实际项目案例,了解如何将理论知识应用于实践中。通过分析和运行这些代码,开发者不仅可以掌握基本的界面设计和Activity管理,还能了解如何组织项目结构,...

Global site tag (gtag.js) - Google Analytics