`

Android中Adapter原理

 
阅读更多

 

listview加载adapter过程是这样的.

1 先判断adapter 有多少数据项,根据这个数据确定有多少item. 
2 确定每个item里加载哪个View. 
3 把View里加载要显示的数据.

问提一个一个来解决. 第一个问题: 因为adapter都要关联一个list .有来存储数据.list的项数就是Item的数目. 我们在重载BaseAdapter 时候,都要实现这个函数

public int getCount() {                           
        return weatherList.size();   
    }   

哎,这个函数就是确定关联条目的.

第二个问题 哪来的view 呢, 当然我们自己创建的.重载BaseAdapter时候你要实现getView()这个函数,就是这个view.

第三个问题,你自己创建的view.加载哪些数据你该知道的.呵呵.

张豪就喜欢看例子,这个小伙子技术,管理都很牛,得以他为榜样. 得努力.

public class CustomAdapterActivity extends ListActivity   
{   
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState)   
    {   
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.main);   
        ArrayList<Weather> weatherList = new ArrayList<Weather>();   
        Weather w = new Weather( "London", 17, Weather.OVERCAST );   
        weatherList.add( w );   
        w = new Weather( "Paris", 22, Weather.OVERCAST );   
        weatherList.add( w );   
        w = new Weather( "Athens", 29, Weather.SUNNY );   
        weatherList.add( w );   
        w = new Weather( "Stockholm", 12, Weather.RAIN );   
        weatherList.add( w );   
        WeatherAdapter weatherAdapter = new WeatherAdapter(    
                this,   
                weatherList );    
        setListAdapter( weatherAdapter );   
    }   
}  

哎,这个大家都很清楚,关键问题是weatherAdapter 哪来的呢? 自己创建的啊,如果创建呢?

public class WeatherAdapter extends BaseAdapter {   
  
    private Context context;   
    private List<Weather> weatherList;  
 这就是adapter关联的List,用来存储数据.还记的ArrayList 要往里传参数吗? 传的也是这个类型啊.呵呵
  
    public WeatherAdapter(Context context, List<Weather> weatherList ) {    
        this.context = context;   
        this.weatherList = weatherList;   
    }   
  
    public int getCount() {                           
        return weatherList.size();   
    }   
  
    public Object getItem(int position) {        
        return weatherList.get(position);   
    }   
  
    public long getItemId(int position) {     
        return position;   
    }   
  
    public View getView(int position, View convertView, ViewGroup parent) {    
        Weather weather = weatherList.get(position);   
        
return new WeatherAdapterView(this.context, weather );   
    }   
  
}  

哎,这段告诉了我们,有多少个Item, 可以通过getCount()得到了。 可是View 哪来的呢?
当然是getView ()这个函数提供.

这个view 的获取就多中多样了,我们可以传个LayoutID. 通过Inflater出来,也可以自己创建个,只要出来就行.

在这里,我们自己创建个View. 这个View.是个VIewGroup.


class WeatherAdapterView extends LinearLayout {           
        public static final String LOG_TAG = "WeatherAdapterView";   
  
        public WeatherAdapterView(Context context,    
                                Weather weather ) {   
            super( context );   
  
            this.setOrientation(HORIZONTAL);           
            LinearLayout.LayoutParams cityParams =    
                new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT);   
            cityParams.setMargins(1, 1, 1, 1);   
  
            TextView cityControl = new TextView( context );   
            cityControl.setText( weather.getCity() );   
            addView( cityControl, cityParams);          
  
            LinearLayout.LayoutParams temperatureParams =    
                new LinearLayout.LayoutParams(20, LayoutParams.WRAP_CONTENT);   
            temperatureParams.setMargins(1, 1, 1, 1);   
  
            TextView temperatureControl = new TextView(context);   
            temperatureControl.setText( Integer.toString( weather.temperature ) );   
            addView( temperatureControl, temperatureParams);               
  
            LinearLayout.LayoutParams skyParams =    
                new LinearLayout.LayoutParams(25, LayoutParams.WRAP_CONTENT);   
  
            ImageView skyControl = new ImageView( context );   
            Log.d( LOG_TAG, weather.getCity()+" -> "+weather.sky );   
            skyControl.setImageResource( weather.getSkyResource() );   
            addView( skyControl, skyParams );   
        }   
}   

 

Android ListView理解,BaseAdapter ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来。一般而言,一个ListView由以下三个元素组 成:

1.View,用于展示列表,通常是一个xml所指定的。大家都知道Android的界面基本上是由xml文件负责完成的,所以ListView的界 面也理所应当的使用了xml定义。例如在ListView中经常用到的“android.R.layout.simple_list_item_1”等, 就是Android系统内部定义好的一个xml文件。

2.适配器,用来将不同的数据映射到View上。不同的数据对应不同的适配器,如ArrayAdapter,CursorAdapter, SimpleAdapter等, 他们能够将数组,指针指向的数据,Map等数据映射到View上。也正是由于适配器的存在,使得ListView的使用相当灵活,经过适配器的处理后,在 view看来所有的数据映射过来都是一样的。

3.数据,具体的别映射的数据和资源,可以是字符串,图片等,通过适配器,这些数据将会被现实到 ListView上。所有的数据和资源要显示到ListView上都通过适配器来完成。 系统已有的适配器可以将基本的数据显示到ListView上,如:数组,Cursor指向的数据,Map里的数据。但是在实际开发中这些系统已实现 的适配器,有时不能满足我们的需求。而且系统自带的含有多选功能ListView在实际使用过程中会有一些问题。要实现复杂的ListView可以通过继 承ListView并重写相应的方法完成,同时也可以通过继承BaseAdapter来实现。通过文档可以看出,ArrayAdapter,CursorAdapter, SimpleAdapter都继承于BaseAdapter。所以通过继承BaseAdapter就可以完成自己的Adapter,可以将任何复杂组合的数据和资源,以任何你想要的显示效果展示给大家。 继承BaseAdapter之后,需要重写以下四个方法:getCount,getItem,getItemId,getView。

ListView绘制的过程如下:首先,系统在绘制ListView之前,将会先调用getCount方法来获取Item的个数。之后每绘制一个 Item就会调用一次getView方法,在此方法内就可以引用事先定义好的xml来确定显示的效果并返回一个View对象作为一个Item显示出来。也 正是在这个过程中完成了适配器的主要转换功能,把数据和资源以开发者想要的效果显示出来。也正是getView的重复调用,使得ListView的使用更 为简单和灵活。这两个方法是自定ListView显示效果中最为重要的,同时只要重写好了就两个方法,ListView就能完全按开发者的要求显示。而 getItem和getItemId方法将会在调用ListView的响应方法的时候被调用到。所以要保证ListView的各个方法有效的话,这两个方 法也得重写。比如:没有完成getItemId方法的功能实现的话,当调用ListView的getItemIdAtPosition方法时将会得不到想 要的结果,因为该方法就是调用了对应的适配器的getItemId方法。

 

分享到:
评论

相关推荐

    android中adapter的使用

    在Android开发中,Adapter是一个非常重要的组件,它起到了数据与视图之间的桥梁作用。Adapter类允许我们将数据集合...理解这三种Adapter的工作原理和使用方式,能够帮助你更好地在Android应用中实现数据与视图的交互。

    Android自定义Adapter适配器

    在Android开发中,Adapter是一个至关重要的组件,它作为数据源与UI控件之间的桥梁,使得数据能够被适配并显示在界面中。本项目聚焦于自定义Adapter的实现,特别是如何将其应用于ListView的数据显示。 首先,理解...

    android adapter详解

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

    Android中Adapter的工作原理.pdf

    **Android中的Adapter是Android开发中不可或缺的一个组件,特别是在处理数据展示时,如ListView、GridView等。Adapter作为数据源和UI组件之间的桥梁,使得数据能够被适配并显示在列表视图上。** ### 1. Adapter简介...

    Android ListView adapter不同布局

    "Android ListView adapter不同布局"这个主题就是关于如何在ListView中实现这样的功能。 首先,我们了解ListView的工作原理。ListView依赖于Adapter来填充数据。Adapter就像一个桥梁,连接数据源(如ArrayList)和...

    android开发Adapter详解

    在Android开发中,Adapter是一种用于连接数据源和视图组件的重要桥梁。它主要用于处理数据集合与列表视图之间的交互,确保视图能够正确且高效地展示数据。Adapter的存在极大地简化了开发者的工作,使得他们能够更加...

    android中adapter与checkbox、editText冲突的解决方案

    在Android开发中,Adapter是连接数据源和UI组件的关键角色,它使得数据能够适配并显示在ListView、GridView等视图组件中。然而,在实际应用中,我们常常遇到Adapter与CheckBox、EditText等交互控件冲突的问题。这...

    Android之Adapter用法总结

    在Android开发中,Adapter是一个至关重要的组件,它作为数据源和UI展示之间的桥梁,使得数据能够正确地在各种视图组件(如ListView、GridView)中显示。Adapter的主要职责是将后端的数据转换成前端可展示的视图。...

    浅析Android之Adapter用法总结

    Adapter是Android开发中不可或缺的一部分,它是数据模型与用户界面之间的重要桥梁。在Android系统中,Adapter主要用于将数据源(如数组、列表或数据库查询结果)转换成可显示的视图组件,常见于ListView、GridView等...

    android之优雅书写多类型Adapter

    在Android开发中,Adapter是一个非常重要的组件,它用于在数据源和UI视图之间建立桥梁,使得数据能够正确地展示在ListView、RecyclerView等视图控件中。在实际项目中,我们经常遇到需要显示多种类型的数据,比如在一...

    Android 实现适配器中的子控件与Activity通信

    在Android开发中,Adapter是连接数据源和UI组件的关键角色,尤其在处理列表视图(ListView)、网格视图(GridView)等复用视图时。本篇将详细讲解如何实现Adapter中的子控件与Activity之间的通信,以提高用户体验并...

    android adapter

    在开发过程中,对于每个具体的Adapter,如ArrayAdapter、CursorAdapter等,应当理解其基本用法和工作原理,这样在处理特定问题时可以更加高效。同时,针对Android Adapter的学习,建议做好个人资料整理,方便快速...

    通用的adapter适配器

    在Android开发中,Adapter是一个非常重要的组件,它起到了数据与视图之间的桥梁作用。本项目“通用的adapter适配器”旨在提供一个适用于ListView和GridView的多功能适配器,简化了开发者在处理列表或网格视图时的...

    Android listview例子, 自定义Adapter:含Button控件

    在Android中,有多种Adapter类型,如ArrayAdapter、CursorAdapter等,但为了实现特定的布局和交互,我们常常需要自定义Adapter。 自定义Adapter需要继承BaseAdapter或者已有的Adapter类,并重写以下关键方法: 1. `...

    android可拖动排序adapter

    在Android开发中,`Adapter` 是一个至关重要的组件,它作为数据源与用户界面之间的桥梁。`DragSortAdapter` 是一种特殊类型的`Adapter`,它允许用户通过触摸屏幕来直接拖动列表项进行排序,提供了丰富的交互体验。...

    android BaseAdapter listView优化

    首先,我们来理解一下Adapter在Android中的作用。Adapter是连接数据源和UI组件的桥梁,它负责将数据转化为可显示的视图。在ListView中,BaseAdapter是一个抽象类,你需要继承它并实现其中的方法,如`getView()`,来...

    android bluetooth 介绍android 蓝牙工作原理

    在Android系统中,蓝牙(Bluetooth)是一种无线通信技术,用于设备间的短距离数据交换和音频流传输。本文将深入探讨Android蓝牙的工作原理,包括其基本概念、架构、配对过程以及API的使用。 首先,我们要了解蓝牙的...

    Android ListView 自定义adapter好友列表

    在Android开发中,ListView是一种...总之,通过自定义Adapter,我们可以根据需求自由设计Android应用中的好友列表,实现各种复杂的显示效果和交互操作。熟练掌握Adapter的使用对于提升Android应用的用户体验至关重要。

    android listview adapter

    本篇文章将深入探讨如何在Android中结合ListView和Adapter,以及通过一个简单的实例来说明其工作原理。 1. **ListView的基础理解** - ListView是一个可滚动的视图,用于显示一列可点击的项目。 - 每个列表项通常...

    Android Adapter详解(2)

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

Global site tag (gtag.js) - Google Analytics