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

在介绍数据绑定时,我们使用了系统自带的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资源:

<string-array name=”activity_name”>       
  <item>Bezier</item>       
  <item>Brush</item>       
  <item>Colors</item>       
  <item>Font</item> 
  <item>Image</item>
  <item>Path</item>
  <item>Pen</item>
  <item>Shape</item> 
  <item>Transform</item>
 </string-array>
 
 <string-array name=”activity_info”>       
  <item>Bezier</item>       
  <item>Pattern ,Gradients</item>       
  <item>Colors</item>       
  <item>FontDemo, FontTypes</item> 
  <item>DrawMap, JumbleImage, SeeThroughImage</item>
  <item>Polys, Paths</item>
  <item>Lines, Dashes, LineCap,LineJoin</item>
  <item>Oval ,Pear ,Shape2DDemo</item> 
  <item>Transform</item>
 </string-array>

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

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

类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等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值