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

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

创新互联公司-专业网站定制、快速模板网站建设、高性价比汉源网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式汉源网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖汉源地区。费用合理售后完善,十载实体公司更值得信赖。

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

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

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

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

 
 
 
 
  1. class ActivityInfo{
  2.      int iconIndex;
  3.      String activityName;
  4.      String activityInfo;
  5.     }    
  6.     class ActivityInfoAdapter extends ArrayAdapter{    
  7.      int resource;
  8.      public ActivityInfoAdapter(Context context, int resourceId,
  9.        List 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 activityInfos
  42.          =new ArrayList();
  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
  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等。

新闻名称:Android开发速成简洁教程十一:自定义Adapter显示列表
文章来源:http://www.shufengxianlan.com/qtweb/news32/26582.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联