Android打造listview万能适配器(下)
来源:互联网 发布:阿里云空间代理 编辑:程序博客网 时间:2024/05/17 02:52
来自:http://www.imooc.com/learn/372
我们接上篇文章,现在将建立一个通用的抽象的BaseAdapter。
1 新建CommonAdapter继承自BaseAdapter
package com.baseadapter.utils;import java.util.List;import com.baseadapter.bean.Bean;import com.example.imooc_baseadapter.R;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;/** * 编写通用的Adapter,指定泛型,以便适应不同的Java bean * @param <T> */public abstract class CommonAdapter<T> extends BaseAdapter { //这些属性都是每个适配器中都能用到的,访问控制符设置为protected,以便继承的子类都能访问 protected LayoutInflater mInflater; protected List<T> mDatas;//数据源 protected Context mContext; protected int layoutId;//item布局文件 public CommonAdapter(Context context, List<T> mDatas, int layoutId) { this.mContext = context; this.mDatas = mDatas; mInflater = LayoutInflater.from(context); this.layoutId = layoutId; } @Override public int getCount() { return mDatas.size(); } @Override public T getItem(int position) {//这里的返回值类型是T,不是自动生成的Object return mDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //初始化ViewHolder,加载我们的item布局文件 ViewHolder holder = ViewHolder.get(mContext, convertView, parent, layoutId, position); convert(holder, getItem(position));//getItem(position)的类型就是T,这句话在子类中的具体实现就是给具体的控件初始化 //并赋值,初始化赋值控件时需要viewHolder和具体的数据Java bean,在这里抽象出来就是类型T return holder.getConvertView();//返回convertView } public abstract void convert(ViewHolder holder, T t);}
2 修改我们的MyAdapterWithCommonViewHolder,使之继承自我们定义的抽象通用的CommonAdapter
package com.example.imooc_baseadapter;import java.util.List;import javax.security.auth.PrivateCredentialPermission;import com.baseadapter.bean.Bean;import com.baseadapter.utils.CommonAdapter;import com.baseadapter.utils.ViewHolder;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;/** * 修改此适配器,使之继承自我们定义的抽象通用的CommonAdapter */public class MyAdapterWithCommonViewHolder extends CommonAdapter<Bean> { public MyAdapterWithCommonViewHolder(Context context, List<Bean> datas) { super(context, datas, R.layout.item); } @Override public void convert(ViewHolder holder, Bean bean) { TextView title = holder.getView(R.id.id_title); title.setText(bean.getTitle()); //上面的两句话可以合并为((TextView)holder.getView(R.id.id_title)).setText(bean.getTitle()); TextView desc = holder.getView(R.id.id_desc); desc.setText(bean.getDesc()); TextView time = holder.getView(R.id.id_time); time.setText(bean.getTime()); TextView phone = holder.getView(R.id.id_phone); phone.setText(bean.getPhone()); }}
我们从以上代码可以看出,优化后的代码,我们只需要在convert(ViewHolder holder, Bean bean)方法中找到我们在item中的控件并设置相应的数值即可,那么,我们也可以在ViewHolder中将引用控件并赋值的工作也完成了。如下,继续优化
1 在ViewHolder类中添加给控件赋值的方法,因为本案例都是TextView,因此代码如下:
/*** 找到我们定义的TextView控件,并给控件赋值 */public ViewHolder setText(int viewId, String text){ TextView tv = getView(viewId); tv.setText(text); return this;}
2 修改MyAdapterWithCommonViewHolder中convert下面的代码即可
holder.setText(R.id.id_title, bean.getTitle()) .setText(R.id.id_desc, bean.getDesc()) .setText(R.id.id_time, bean.getTime()) .setText(R.id.id_phone, bean.getPhone());
至此,我们对适配器的优化已经结束了。另外,我们可以在ViewHolder中添加对其他控件赋值的方法,本例我们只是setText给Textview赋值,我们还可以给ImageView设置图片资源,比如:
/** * 如果item中有ImageView控件的话,我们就可以用此方法给控件设置图片资源 */ public ViewHolder setImageResource(int viewId, int resId) { ImageView imageView = getView(viewId); imageView.setImageResource(resId); return this; } public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) { ImageView imageView = getView(viewId); imageView.setImageBitmap(bitmap); return this; } //我们还可以添加其他的更多的方法。。。。。。。。。。。
源码在这里:http://download.csdn.net/detail/hnyzwtf/9386086
0 0
- Android打造listview万能适配器(下)
- Android打造listview万能适配器(上)
- Android打造ListView万能适配器
- listView 打造万能适配器
- 打造万能的android ListView GridView 适配器
- Android 打造万能的ListView GridView 适配器
- android 打造万能的ListView GridView 适配器
- Android 打造万能的ListView GridView 适配器
- Android打造ListView和GridView万能适配器
- ListView Adapter 封装 打造Android 万能适配器
- Android之打造ListView的万能适配器
- xamarin android 打造ListView万能适配器
- Android-打造万能适配器
- Android 打造万能适配器
- android打造万能适配器
- 为ListView打造万能适配器
- 打造万能的Listview适配器
- Android 快速开发系列 打造万能的ListView GridView 适配器
- 回顾我的2015
- 快速排序
- xcode 修改 production name
- mycnart操作使用教程 -如何默认不显示 商品价格。会员登陆...
- 跨年特辑 搞笑
- Android打造listview万能适配器(下)
- fdfs管理
- Web前端开发实战3:二级下拉式菜单之jQuery实现
- 用MATLAB写一个发邮件的小程序
- php+mysql 简单增删查改
- OCMOD代码调整系统(Modification System)
- 终端克隆没权限以及生成git所需的SSH keys
- iOS Masonry Key debugging 调试详解
- hdu1950 最大上升子序列