我在刚玩android 时候,对这个adapter很不理解,到底是什么原理呢? 适配器,哎,只知道setAdapter()把参数传进去,系统就显示出来了。

今天,针对这个东西,我们做个系统详细的分析.

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 weatherList = new ArrayList();  
        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 weatherList;    这就是adapter关联的List,用来存储数据.还记的ArrayList 要往里传参数吗? 传的也是这个类型啊.呵呵
  
    public WeatherAdapter(Context context, List 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 );  
        }  
}  
  
有了这个就很清楚了. 呵呵,很明白吧, 一定得深入,细致的理解.

更多相关文章

  1. 使用FlowDroid生成Android应用程序的函数调用图
  2. Android类加载机制的细枝末节
  3. [android]-如何在向服务器发送request时附加已保存的cookie数据
  4. Android中抓取手机视频流数据。
  5. android数据库持久化框架
  6. 多个Android客户端同步服务器端表中数据架构分析
  7. Android客户端使用HttpClient发起web数据访问
  8. ReactNative Android 实现加载本地图片
  9. android 查看系统数据库

随机推荐

  1. android WebView将新浪天气为我所用 ----
  2. 说一下你眼中的Android的优点和不足之处(
  3. Android的IPC机制(七)—— Socket的原理简
  4. 【Android笔记】ubuntu 16.04下android调
  5. Android(安卓)IntentService完全解析 当S
  6. Android开发——Accessibility机制实现模
  7. Android 框架问题分析案例 - 谁杀了桌面?
  8. Android下Activity结束(finish())之后没有
  9. Android项目中添加广告
  10. 分享一种最简单的Android打渠道包的方法