【Android】Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法

Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段

ArrayAdapter、SimpleAdapter和BaseAdapter的一些简短代码片段,希望用时方便想起其用法。

原文来源:http://blog.csdn.net/shakespeare001/article/details/7926783

1.ArrayAdapter

只可以简单的显示一行文本

代码片段:

[java] view
plain
copy

  1. ArrayAdapter<String> adapter = new ArrayAdapter<String>(  
  2.                 this,  
  3.                 R.layout.item,//只能有一个定义了id的TextView  
  4.                 data);//data既可以是数组,也可以是List集合  

2.SimpleAdapter

可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。

代码片段:

[java] view
plain
copy

  1. List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;  
  2. for(int i =0; i < lengh; i++) {      
  3.     Map<String,Object> item = new HashMap<String,Object>();      
  4.     item.put("image", R.drawable.portrait);      
  5.     item.put("title", mListTitle[i]);      
  6.     item.put("text", mListStr[i]);      
  7.     mData.add(item);       
  8. }      
  9. SimpleAdapter adapter = new SimpleAdapter(  
  10.                 this,  
  11.                 mData,  
  12.                 R.layout.item,      
  13.                 new String[]{"image","title","text"},  
  14.                 new int[]{R.id.image,R.id.title,R.id.text});     

3.BaseAdapter

可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。

代码片段:

[java] view
plain
copy

  1. private class MyListAdapter extends BaseAdapter{    
  2.         private Context mContext;    
  3.         private int[] colors=new int[]{0xff626569,0xff4f5257 };    
  4.          public MyListAdapter(Context context){    
  5.              mContext=context;    
  6.          }    
  7.         @Override    
  8.         public int getCount() {    
  9.             // TODO Auto-generated method stub    
  10.             return mListText.length;    
  11.         }    
  12.     
  13.         @Override    
  14.         public Object getItem(int position) {    
  15.             // TODO Auto-generated method stub    
  16.             return position;    
  17.         }    
  18.     
  19.         @Override    
  20.         public long getItemId(int position) {    
  21.             // TODO Auto-generated method stub    
  22.             return position;    
  23.         }    
  24.     
  25.         @Override    
  26.         public View getView(int position, View convertView, ViewGroup parent) {    
  27.             ImageView image=null;  //这些控件可以单独封装成一个类(Holder),便与优化  
  28.             TextView title=null;    
  29.             TextView  content=null;    
  30.             if(convertView==null){    
  31.                 convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);    
  32.                 image=(ImageView) convertView.findViewById(R.id.color_image);    
  33.                 title=(TextView) convertView.findViewById(R.id.color_title);    
  34.                 content=(TextView) convertView.findViewById(R.id.color_text);    
  35.             }   
  36.             int colorPos=position%colors.length;    
  37.             convertView.setBackgroundColor(colors[colorPos]);    
  38.             title.setText(mListTitle[position]);    
  39.             content.setText(mListText[position]);    
  40.             image.setImageResource(R.drawable.portrait);    
  41.                 
  42.             return convertView;    
  43.         }    
  44.             
  45.     }    
  46.   
  47. --------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----  
  48.   
  49.   
  50.  public class MyBaseAdapter extends BaseAdapter{  
  51.        
  52.            private LayoutInflater mInflater;  
  53.             public MyAdapter(Context context){  
  54.                this.mInflater = LayoutInflater.from(context);  
  55.           }  
  56.             @Override  
  57.            public int getCount() {  
  58.                 // TODO Auto-generated method stub  
  59.                 return mData.size();  
  60.             }  
  61.        
  62.             @Override  
  63.             public Object getItem(int arg0) {  
  64.                 // TODO Auto-generated method stub  
  65.                 return null;  
  66.            }  
  67.        
  68.             @Override  
  69.             public long getItemId(int arg0) {  
  70.                 // TODO Auto-generated method stub  
  71.                 return 0;  
  72.             }  
  73.        
  74.             @Override  
  75.             public View getView(int position, View convertView, ViewGroup parent) {  
  76.                    
  77.                 ViewHolder holder = null;  
  78.                 if (convertView == null) {  
  79.                     holder=new ViewHolder();   
  80.                     convertView = mInflater.inflate(R.layout.vlist2, null);  
  81.                     holder.img = (ImageView)convertView.findViewById(R.id.img);  
  82.                     holder.title = (TextView)convertView.findViewById(R.id.title);  
  83.                     holder.info = (TextView)convertView.findViewById(R.id.info);  
  84.                     holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);  
  85.                     convertView.setTag(holder);  
  86.                        
  87.                 }else {                       
  88.                     holder = (ViewHolder)convertView.getTag();  
  89.                 }  
  90.                 holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));  
  91.                 holder.title.setText((String)mData.get(position).get("title"));  
  92.                 holder.info.setText((String)mData.get(position).get("info"));  
  93.                 //给每一个列表后面的按钮添加响应事件  
  94.                 holder.viewBtn.setOnClickListener(new View.OnClickListener() {  
  95.                     @Override  
  96.                     public void onClick(View v) {  
  97.                         showInfo();                  
  98.                     }  
  99.                 });  
  100.   
  101.                 return convertView;  
  102.             }  
  103.         ------------  
  104.         public final class ViewHolder{  
  105.             public ImageView img;  
  106.             public TextView title;  
  107.             public TextView info;  
  108.             public Button viewBtn;  
  109.         }  
时间: 2024-11-03 21:10:42

【Android】Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法的相关文章

Android常见控件之SimpleAdapter和List

一.SimpleAdapter SimpleAdapter是一个简单的适配器,可以将静态数据映射到XML文件中定义 好的视图.你可以指定数据支持的列表如ArrayList组成的Map.在ArrayList中 的每个条目对应List中的一行.Maps包含每行数据.你可以指定一个定义了被用 于显示行的视图XML文件,通过关键字映射到指定的视图. 构造函数 public SimpleAdapter (Context context, List<? extends Map<String, ?>&

Android屏幕适配全攻略(最权威的官方适配指导)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习本文,对于Android的屏幕适配,你将有所收获! Android屏幕适配出现的原因 重要概念 屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi 解决方案 支持

Android中GridView和ArrayAdapter用法实例分析_Android

本文实例分析了Android中GridView和ArrayAdapter用法.分享给大家供大家参考,具体如下: GridView是一个表格化的二维排版的View,当GridView的文字放不下时会出现scrolling的效果,GridView中的元素命名为Item,要将Item放入GridView,需要ArrayAdapter对象. 例子如下: import android.app.Activity; import android.os.Bundle; import android.view.V

一种粗暴快速的Android全屏幕适配方案

本文讲的是一种粗暴快速的Android全屏幕适配方案,由于Android碎片化严重,屏幕适配一直是开发中较为头疼的问题.面对市面上五花八门的屏幕大小与分辨率,Android基于dp与res目录名称来适配的方案已无法满足一次编写全屏幕适配的需求,为了达到最优的视觉效果,开发过程中总是需要花费较多资源进行适配.也有开发者给出了一些自己的解决方案.首先来分析一下一些常见的解决方案的现状: 1. 官方适配方案 – dp.dp是Android开发中特有的一个单位.与px不同,dp是基于屏幕像素密度的一种单

图片-Android屏幕适配问题,菜鸟求助

问题描述 Android屏幕适配问题,菜鸟求助 如题, 本人菜鸟不知道怎么屏幕适配呀, 我用的是demin建立了两个文件, 一个是(1280x720的),另外一个是1920x1080的. 在里面写的尺寸.因为我们美工给我的图片都是px的. 换算如下 解决方案 做android开发,开源嘛,满市场都是凌乱的机型,总少不了适配这样或那样的型号.在这里分享一下自己在开发中用到的方法. 首先要介绍一下drawable-mdpi.drawable-hdpi-1280x800.drawable-hdpi.这

android网络图片适配不同分辨率屏幕

问题描述 android网络图片适配不同分辨率屏幕 需要在android手机上面显示网络图片,但是手机的分辨率是有不同的,有mdpi,ldpi,hdpi,xhdpi等多种分辨率,怎么让图片在每个手机上面显示都是和屏幕一样宽.是让手机传不同的分辨率给服务器,服务器返回不同的图片,还是怎么做?求解答! 解决方案 一般是传参数告诉服务器是什么类型的,服务器返回不同的图片还有就是比如新浪Open API的那些图像分为middle,large,small等去获取

android 屏幕适配问题

问题描述 android 屏幕适配问题 我写了4中尺寸的适配,但是每次都是跳到hdpi这边,不知道怎么回事,用了高分辨率的 手机和低分辨率的都是一样效果 解决方案 如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情. ? 首先:你需要在AndroidManifest.xml文件的<manifest>元素如下添加子元素 <supports-screens android:largeScreens="true

android-有关于Android屏幕适配

问题描述 有关于Android屏幕适配 请问一下各位牛人,分辨率为1280x800的手机匹配不到values-1280x800的资源呢? 解决方案 10.1" WXGA(Tablet) 1280×800 解决方案二: 谢谢回答!但是我没看明白!

实用Android 屏幕适配方案分享

转载地址:http://blog.csdn.net/gao_chun/article/details/45645051 真正可用,并且简单易行,可以在多个屏幕大小和屏幕密度上有良好表现的Android 屏幕适配方案,已用在一款成熟互联网应用中,效果还不错. 说起android开发,UI界面的多机型适配,一向是个很重要的问题. 网上这方面的文章很多,面试的时候也经常会问到,大部分的内容都很类似,无外乎用dp,sp 不要用px之类老生常谈的问题. 但是会说的居多,实际可以执行的可行方案,很少有人会.