关于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
给主人留下些什么吧!~~
评论热议
这几天跟着我项目组的人完成一个文件管理器的功能,因为要显示文件的图片以及相关的文件信息,然后这里是采用了一个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
给主人留下些什么吧!~~
评论热议
相关文章推荐
- 关于android中BaseAdapter的理解
- 关于Android 中的BaseAdapter用法理解
- Android中关于SimpleAdapter的简单理解
- Android中BaseAdapter深入理解
- android BaseAdapter getView 理解
- Android中BaseAdapter的理解
- 关于MVP设计模式 和 BaseRecyclerViewAdapterHelperV2.4.4 Android
- Android中BaseAdapter的理解
- Android ListView的理解(二) --- Adapter, BaseAdapter, RecycleBin
- Android中BaseAdapter的理解【IT168技术】
- android开发中的BaseAdapter之理解(引用自网络,总结的很好,谢谢)
- Android中关于Adapter的使用(下)BaseAdapter
- android BaseAdapter getView 理解
- Android中BaseAdapter的理解
- Android关于listView的BaseAdapter以及三级优化
- Android ListView BaseAdapter的理解
- android之BaseAdapter的使用,加深引用对象理解
- 关于android BaseAdapter 中如何灵活控制listview 是否显示,是否有事件触发
- Android 中关于SimpleAdapter构造参数的理解
- 关于BaseAdapter的getView方法的理解