Chinaunix首页 | 论坛 | 博客
  • 博客访问: 513015
  • 博文数量: 92
  • 博客积分: 3146
  • 博客等级: 中校
  • 技术积分: 2314
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-27 10:20
文章分类

全部博文(92)

文章存档

2014年(3)

2013年(17)

2012年(16)

2011年(22)

2010年(34)

分类: 嵌入式

2011-06-02 20:29:23

   对于我这样还没有入门的人说,学这个android真是拿到一个API就不知道干嘛。每拿到一个API就得去百度寻找答案,现在讲述一下自己对这个BaseAdapter的几点理解。
 
   这几天跟着我项目组的人完成一个文件管理器的功能,因为要显示文件的图片以及相关的文件信息,然后这里是采用了一个FileAdapter继承于BaseAdapter这个类。因为适配器的主要作用是用来给诸如Spinner,ListView,GridView来填充数据的。可以用来将不同的数据映射到View上。写适配器主要是得重写四个方法:getCount,getItem,getItemId,getView。
 
   现在对这个做一下具体的分析,为啥必须得重写这四个方法。我在 eclipse跟踪的时候:
 
首先进去的getCount()这个方法,这返回的是list里面的个数,即你要显示在View上的item,
 
紧接着就是根据你的item如何来绘制一个view了,即getView可以引用事先定义好的xml来确定显示的效果并返回一个View对象作为一个Item显示出来。也正是在这个过程中完成了适配器的主要转换功能,把数据和资源以开发者想要的效果显示出来。即有多少个Item就调用多少次ListView,使得ListView的使用更为简单和灵活。
 
而getItem和getItemId方法将会在调用ListView的响应方法的时候被调用到。所以要保证ListView的各个方法有效的话,这两个方法也得重写。
  1. class FileAdapter extends BaseAdapter{
  2.         Context mContext;
  3.         LayoutInflater mLInflater;
  4.         
  5.         
  6.         public FileAdapter (Context context) {
  7.             this.mContext= context;
  8.             //mListFile=getFileData(path);

  9.             this.mLInflater = LayoutInflater.from(context);
  10.         }
  11.         
  12.         @Override
  13.         public int getCount() {
  14.             if(mListFile.size()!=0&&mListFile!=null){
  15.                 return mListFile.size();
  16.             }else{
  17.                 return 0;
  18.             }
  19.         }

  20.         @Override
  21.         public Object getItem(int position) {
  22.             return mListFile.get(position);
  23.         }

  24.         @Override
  25.         public long getItemId(int position) {
  26.             return position;
  27.         }

  28.         @Override
  29.         public View getView(int position, View convertView, ViewGroup parent) {
  30.             
  31.             ViewHolder holder = null ;
  32.             if(convertView==null){
  33.                 convertView = mLInflater.inflate(R.layout.sd_card_item, null);
  34.                 holder = new ViewHolder();
  35.                 holder.setFileName((TextView)convertView.findViewById(R.id.filename));
  36.                 //holder.setmLastTime((TextView)convertView.findViewById(R.id.time));

  37.                 holder.setImageIcon((ImageView)convertView.findViewById(R.id.image));
  38.                 convertView.setTag(holder);
  39.             }else {
  40.                 holder = (ViewHolder)convertView.getTag();
  41.             }
  42.             int id = 0;
  43.             String type = mListFile.get(position).getFileType();
  44.              if(type=="0"){
  45.                  id = R.drawable.up1;
  46.              }else if(type=="1"){
  47.                  id = R.drawable.sdcard0;
  48.              }else if(type=="2"){
  49.                  id = R.drawable.folder2;
  50.              }else if(type=="3"){
  51.                  id= R.drawable.other3;
  52.              }else if(type=="55"){
  53.                  id=R.drawable.none;
  54.              }
  55.             
  56.             holder.getFileName().setText(mListFile.get(position).getFileName());
  57.             holder.getImageIcon().setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), id));
  58.             holder.getmLastTime().setText(mListFile.get(position).getFileLastTime());
  59.             
  60.             return convertView;
  61.         }
  62.         
  63.     }
  1. private class ViewHolder {
  2.         
  3.         TextView fileName;
  4.         TextView mLastTime;
  5.         ImageView imageIcon;
  6.         
  7.         public TextView getFileName() {
  8.             return fileName;
  9.         }
  10.         public void setFileName(TextView fileName) {
  11.             this.fileName = fileName;
  12.         }
  13.         public TextView getmLastTime() {
  14.             return mLastTime;
  15.         }
  16.         public void setmLastTime(TextView mLastTime) {
  17.             this.mLastTime = mLastTime;
  18.         }
  19.         public ImageView getImageIcon() {
  20.             return imageIcon;
  21.         }
  22.         public void setImageIcon(ImageView imageIcon) {
  23.             this.imageIcon = imageIcon;
  24.         }
  25.         
  26.     }
代码中mListFile 为这个自定义的类型List;相信有上面部分还是相对来说比较好理解的!
阅读(1968) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~