Android开发速成简洁教程十一:自定义Adapter显示列表

移动开发 Android
在介绍数据绑定时,我们使用了系统自带的SimpleAdapter。Android 允许自定义Adapter ,理论上可以使用任意的View(Layout)来显示数据。下图是对AndroidGraphics2DTutorial做改动,使用自定义 Adapter来显示示例Activity列表。

在介绍数据绑定时,我们使用了系统自带的SimpleAdapter。Android 允许自定义Adapter ,理论上可以使用任意的View(Layout)来显示数据。下图是对AndroidGraphics2DTutorial做改动,使用自定义 Adapter来显示示例Activity列表。

在例子中我们把原来的AndroidGraphics2DTutorial改名为AndroidGraphics2DTutorial1,重新创建一个类AndroidGraphics2DTutorial来显示示例列表。打算使用三个View来显示列表中的一项,一个图标(例子中随机使用了一些图 标),一个文本框显示示例Activity名称,另一个文本框显示示例的具体信息。在res\layout目录下创建一个 activitylist.xml。内容如下:

这次我们不从AndroidManifest.xml中读取Activity列表,而是使用String Array资源。在res\value\string.xml 中添加下列Array资源:

  1. <string-array name=”activity_name”>        
  2.   <item>Bezier</item>        
  3.   <item>Brush</item>        
  4.   <item>Colors</item>        
  5.   <item>Font</item>  
  6.   <item>Image</item> 
  7.   <item>Path</item> 
  8.   <item>Pen</item> 
  9.   <item>Shape</item>  
  10.   <item>Transform</item> 
  11.  </string-array> 
  12.   
  13.  <string-array name=”activity_info”>        
  14.   <item>Bezier</item>        
  15.   <item>Pattern ,Gradients</item>        
  16.   <item>Colors</item>        
  17.   <item>FontDemo, FontTypes</item>  
  18.   <item>DrawMap, JumbleImage, SeeThroughImage</item> 
  19.   <item>Polys, Paths</item> 
  20.   <item>Lines, Dashes, LineCap,LineJoin</item> 
  21.   <item>Oval ,Pear ,Shape2DDemo</item>  
  22.   <item>Transform</item> 
  23.  </string-array> 

定义了这些资源后,可以在程序中使用自定义Adapter来显示列表:

  1. class ActivityInfo{ 
  2.      int iconIndex; 
  3.      String activityName; 
  4.      String activityInfo; 
  5.     }     
  6.     class ActivityInfoAdapter extends ArrayAdapter<ActivityInfo>{     
  7.      int resource; 
  8.      public ActivityInfoAdapter(Context context, int resourceId, 
  9.        List<ActivityInfo> objects) { 
  10.       super(context, resourceId, objects); 
  11.       resource=resourceId
  12.      }     
  13.      @Override 
  14.      public View getView(int position,View ConvertView,ViewGroup parent){ 
  15.       LinearLayout activityInfoView; 
  16.       ActivityInfo activityInfo=getItem(position); 
  17.       String activity_Name=activityInfo.activityName; 
  18.       String activity_Info=activityInfo.activityInfo; 
  19.       int iconIndex=activityInfo.iconIndex; 
  20.       if(ConvertView==null){ 
  21.        activityInfoView=new LinearLayout(getContext()); 
  22.        String inflater=Context.LAYOUT_INFLATER_SERVICE; 
  23.        LayoutInflater vi; 
  24.    vi=(LayoutInflater)getContext().getSystemService(inflater); 
  25.        vi.inflate(resource, activityInfoView,true); 
  26.       }else{ 
  27.        activityInfoView=(LinearLayout)ConvertView; 
  28.       } 
  29.       TextView activity_NameView 
  30.     =(TextView)activityInfoView.findViewById(R.id.activityName); 
  31.       TextView activity_InfoView 
  32.      =(TextView)activityInfoView.findViewById(R.id.activityInfo); 
  33.       ImageView iconView         =(ImageView)activityInfoView.findViewById(R.id.iconImage); 
  34.       activity_NameView.setText(activity_Name); 
  35.       activity_InfoView.setText(activity_Info); 
  36.       iconView.setImageResource(iconIndex); 
  37.       return activityInfoView;      
  38.      } 
  39.     }     
  40.     public class AndroidGraphics2DTutorial extends ListActivity {     
  41.      private ArrayList<ActivityInfo> activityInfos 
  42.          =new ArrayList<ActivityInfo>(); 
  43.      private ActivityInfoAdapter aa; 
  44.      private final static String packgeName="com.pstreets.graphics2d";   
  45.      @Override 
  46.      public void onCreate(Bundle savedInstanceState) { 
  47.       super.onCreate(savedInstanceState); 
  48.       Resources res = getResources(); 
  49.       String[] activity_Names = res.getStringArray(R.array.activity_name); 
  50.       String[] activity_Infos = res.getStringArray(R.array.activity_info); 
  51.       for(int i=0;i<activity_Names.length;i++){ 
  52.        ActivityInfo activityInfo=new ActivityInfo(); 
  53.        activityInfo.activityName=activity_Names[i]; 
  54.        activityInfo.activityInfo=activity_Infos[i]; 
  55.        activityInfo.iconIndex=R.drawable.icon1+i; 
  56.        activityInfos.add(activityInfo); 
  57.       }     
  58.       aa=new ActivityInfoAdapter(this,R.layout.activitylist,activityInfos); 
  59.       setListAdapter(aa); 
  60.      }     
  61.      @Override 
  62.      protected void onListItemClick(ListView l, View v, int position, long id) { 
  63.       ActivityInfo activityInfo = (ActivityInfo) l.getItemAtPosition(position); 
  64.       Intent intent = new Intent(); 
  65.       intent.setClassName(this, 
  66.            packgeName+".example." +activityInfo.activityName); 
  67.       startActivity(intent); 
  68.      } 
  69.     } 

类ActivityInfo定义列表每个元素的Data Model,为Activity的Icon资源ID,Activity Name以及Activity Info.

类ActivityInfoAdapter为自定义Adapter,关键的是public View getView(int position,View ConvertView,ViewGroup parent)。这个函数返回用来显示没个类别元素的View的示例。例子中为activitylist.xml 对应的Layout。

这个例子使用的列表框,自定义Adapter适用所有AdapterView,如Spinner,Gallery等。

责任编辑:闫佳明 来源: imobilebbs
相关推荐

2013-12-27 14:10:36

Android开发Android应用Transform

2013-12-27 14:05:22

Android开发Android应用Dialog

2013-12-26 15:43:07

Android开发Android应用Activities

2013-12-26 15:10:08

Android开发应用和框架Linux 内核

2013-12-27 15:11:17

Android开发访问Internet绘制在线地图

2013-12-26 15:18:09

Android开发安装开发环境

2013-12-27 14:34:46

Android开发Android应用短信触发示例

2013-12-27 14:16:43

Android开发Android应用线程

2013-12-26 15:34:19

Android开发Android应用基本概念

2013-12-26 16:24:13

Android开发Android应用Intents

2013-12-27 13:49:22

Android开发Android应用Button

2013-12-27 12:51:44

Android开发Android应用引路蜂

2013-12-26 16:59:12

Android开发Android应用数据绑定Data Bi

2013-12-27 16:06:10

Android开发Android应用发布应用

2013-12-27 13:27:05

Android开发Android应用RadioButton

2013-12-26 15:46:30

Android开发Android应用用户界面设计

2013-12-26 16:46:21

2013-12-27 15:31:26

Android开发Android应用资源Resources

2013-12-27 13:00:30

Android开发Android应用Context Men

2013-12-27 12:42:15

Android开发Android应用引路蜂
点赞
收藏

51CTO技术栈公众号