您的位置:首页 > 移动开发 > Android开发

关于android中BaseAdapter的理解

2013-10-31 14:13 525 查看
   对于我这样还没有入门的人说,学这个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的各个方法有效的话,这两个方法也得重写。

class FileAdapter extends BaseAdapter{

        Context mContext;

        LayoutInflater mLInflater;

        

        

        public FileAdapter (Context context) {

            this.mContext= context;

            //mListFile=getFileData(path);

            this.mLInflater = LayoutInflater.from(context);

        }

        

        @Override

        public int getCount() {

            if(mListFile.size()!=0&&mListFile!=null){

                return mListFile.size();

            }else{

                return 0;

            }

        }

        @Override

        public Object getItem(int position) {

            return mListFile.get(position);

        }

        @Override

        public long getItemId(int position) {

            return position;

        }

        @Override

        public View getView(int position, View convertView, ViewGroup parent) {

            

            ViewHolder holder = null ;

            if(convertView==null){

                convertView = mLInflater.inflate(R.layout.sd_card_item, null);

                holder = new ViewHolder();

                holder.setFileName((TextView)convertView.findViewById(R.id.filename));

                //holder.setmLastTime((TextView)convertView.findViewById(R.id.time));

                holder.setImageIcon((ImageView)convertView.findViewById(R.id.image));

                convertView.setTag(holder);

            }else {

                holder = (ViewHolder)convertView.getTag();

            }

            int id = 0;

            String type = mListFile.get(position).getFileType();

             if(type=="0"){

                 id = R.drawable.up1;

             }else if(type=="1"){

                 id = R.drawable.sdcard0;

             }else if(type=="2"){

                 id = R.drawable.folder2;

             }else if(type=="3"){

                 id= R.drawable.other3;

             }else if(type=="55"){

                 id=R.drawable.none;

             }

            

            holder.getFileName().setText(mListFile.get(position).getFileName());

            holder.getImageIcon().setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), id));

            holder.getmLastTime().setText(mListFile.get(position).getFileLastTime());

            

            return convertView;

        }

        

    }

private class ViewHolder {

        

        TextView fileName;

        TextView mLastTime;

        ImageView imageIcon;

        

        public TextView getFileName() {

            return fileName;

        }

        public void setFileName(TextView fileName) {

            this.fileName = fileName;

        }

        public TextView getmLastTime() {

            return mLastTime;

        }

        public void setmLastTime(TextView mLastTime) {

            this.mLastTime = mLastTime;

        }

        public ImageView getImageIcon() {

            return imageIcon;

        }

        public void setImageIcon(ImageView imageIcon) {

            this.imageIcon = imageIcon;

        }

        

    }

代码中mListFile 为这个自定义的类型List<FileBean>;相信有上面部分还是相对来说比较好理解的!

阅读(629) | 评论(0) | 转发(1) |

0
上一篇:Android中PreferenceActivity的介绍

下一篇:Android Button特效selector+shape

相关热门文章
超适用纵贯车推广技能_淘富阁...

MySQL优化实例

procfs(从0开始,内核态和用...

字节对齐1

Android系统匿名共享内存Ashme...

linux守护进程的几个关键地方...

stagefright与opencore对比

嵌入式Linux之我行——u-boot-...

嵌入式Linux之我行——内核、...

CodeNavigator -- 程序员必备...

ChinaUnix & ITPUB社区12周年...

ssh连接出现以下提示,求解...

如何扩展MYSQL

准备做一个大型门户,用户什么...

gbk or utf8

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: