为了更方便高效的使用BaseAdapter,特意抽取了一下,下面是简单的结构图:

需要4个类:

【MyBaseAdapter3】:

public abstract class MyBaseAdapter3<T> extends BaseAdapter {
public List<T> list;

public MyBaseAdapter3(List<T> list) {
this.list = list;
}

@Override
public int getCount() {
return list==null?0:list.size();
}

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
T t=list.get(position);
BaseHolder holder;
if(convertView==null){
holder=getHolder();
}else{
holder= (BaseHolder) convertView.getTag();
}
//绑定数据
holder.setData(t);
return holder.getRootView();
}
public abstract BaseHolder getHolder();

}

【MyAdapter3】:

public class MyAdapter3 extends MyBaseAdapter3<Product>{

public MyAdapter3(List<Product> list) {
super(list);
}

@Override
public BaseHolder getHolder() {
return new MyHolder();
}
}

【BaseHolder】:

public abstract class BaseHolder<T> {
private View rootView;//每个item
private T t;//每个item的数据

public BaseHolder() {
rootView=initView();
rootView.setTag(this);
ButterKnife.bind(this,rootView);
}

public void setData(T t){
this.t=t;
refreshData(t);
}

public View getRootView() {
return rootView;
}

public abstract View initView();
protected abstract void refreshData(T t);

}

【MyHolder】:

public class MyHolder extends BaseHolder<Product> {

@Bind(R.id.p_name)
TextView pName;
@Bind(R.id.p_money)
TextView pMoney;
@Bind(R.id.p_yearlv)
TextView pYearlv;
@Bind(R.id.p_suodingdays)
TextView pSuodingdays;
@Bind(R.id.p_minzouzi)
TextView pMinzouzi;
@Bind(R.id.p_minnum)
TextView pMinnum;
@Bind(R.id.p_progresss)
RoundProgress2 pProgresss;

@Override
public View initView() {
return UIUtils.getXmlView(R.layout.item_product_list);
//一般将MyHolder写在MyAdapter3里变成内部类,这样上下文就可以使用Activity了
}

@Override
protected void refreshData(Product product) {
pMinnum.setText(product.getMemberNum());
pMinzouzi.setText(product.getMinTouMoney());
pMoney.setText(product.getMoney());
pName.setText(product.getName());
pSuodingdays.setText(product.getSuodingDays());
pYearlv.setText(product.getYearLv());
pProgresss.setProgress(Integer.parseInt(product.getProgress()));
}
}

【说明1】:一般将MyHolder写成适配器的内部类,这样上下文就可以使用Activity,使用Application作为上下文还有有些样式问题的隐患。

【说明2】:MyHolder用到了工具类UIUtils的下面一个方法,MyApplication extends Application

public static View getXmlView(int layoutId){   return View.inflate(MyApplication.mContext, layoutId, null);}

转载于:https://www.cnblogs.com/libuyi/p/5901798.html

BaseAdapter的抽取相关推荐

  1. 黑马最新Android P2P金融项目开发实战 视频+项目源码

    p2p金融项目,结合现有第三方应用市场上主流p2p金融理财产品特点,集成了新的技术与框架.该项目内容包含p2p金融理财业务流程,数据加密.解密,客户端异常信息上传,用户登录注册,数据的图表展示,第三方 ...

  2. 金融支付 android 源码,Android P2P金融项目开发实战 视频+项目源码

    p2p金融项目,结合现有第三方应用市场上主流p2p金融理财产品特点,集成了新的技术与框架.该项目内容包含p2p金融理财业务流程,数据加密.解密,客户端异常信息上传,用户登录注册,数据的图表展示,第三方 ...

  3. android 自定义baseadapter listview,Android 自定义 BaseAdapter 最佳实践

    虽然现在很多新的项目都在使用RecyclerView,但是很多开发者在一些场景中还是倾向使用ListView或者GridView,然后就是需要写许多的Adapter.一次项目组在新启动一个新项目的时候 ...

  4. 知识图谱中传统关系抽取方法

    目前主要采用统计机器学习的方法,将关系实例转换成高 维空间中的特征向量或直接用离散结构来表示,在标注语 料库上训练生成分类模型,然后再识别实体间关系  基于特征向量方法 最大熵模型(Kambhatl ...

  5. SSAN 关系抽取 论文笔记

    20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...

  6. (1)Adapter适配器(ArrayAdapter、SimpleAdapter、BaseAdapter)

    ArrayAdapter(数组适配器) ArrayAdapter只能显示一行文本数据 ArrayAdapter(@NonNull Context context, @LayoutRes int res ...

  7. 机器不学习:浅析深度学习在实体识别和关系抽取中的应用

    机器不学习 jqbxx.com -机器学习好网站 命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图.命名实体 ...

  8. 2.抽取代码(BaseActivity)

    知识点 俩种退出程序的方法 复制集合 同步的用法 字符数组 工厂模式,生产fatgment,解决了碎片重复创建的问题 全局上下文 actionbar用法 fargmentadapter,当viewpa ...

  9. url获取网站信息不包含网页源文件内的标签_前嗅ForeSpider链接抽取应用场景及链接在源码的html标签里写脚本...

    今天,小编给大家带来的教程为:前嗅ForeSpider脚本教程中,链接抽取的应用场景,以及链接在源码的html标签里写脚本的实战教程.具体内容如下: 一.应用场景 当需要手动添加链接时,可添加链接脚本 ...

最新文章

  1. 洛谷 P1149 火柴棒等式
  2. html语义化面试题,前端面试题-HTML结构语义化
  3. scala集合fold实例:将两个Map合并
  4. js中null和undefined的区别
  5. 教师计算机考试登记网,计算机等级考试及计算机资格考试
  6. 【图像超分辨率】Remote Sensing Imagery Super Resolution Based on Adaptive Multi-Scale Feature Fusion Network
  7. 细说 Vue.js 3.2 关于响应式部分的优化
  8. 住宅按套内面积算,医院人脸识别黄牛,DNA碱基对可能会扩充,菜鸟发布供应链系统,猪瘟不影响食品安全,这就是今天的大新闻...
  9. fs-extra导出换行txt文件
  10. bootstrap项目实例_精选开源SpringBoot项目:涵盖权限、搜索、秒杀、支付!
  11. 这 8 个 Python 技巧让你的数据分析提升数倍!
  12. python时间序列预测不连续怎么办_用Python处理非平稳时间序列攻略
  13. SPSS实现多元方差分析
  14. java 蔡学镛_蔡学镛谈“Linux + Java 会得到什么”
  15. donet使用linq
  16. rplidar.lua
  17. 饭前跑步还是饭后跑步 - 饭后多久跑步
  18. qt5版本管理git_Building Qt 5 from Git/zh
  19. 如何跟剛認識的女孩發短信(轉)
  20. 微信小程序订阅信息之Java实现详解

热门文章

  1. golang 生成随机数
  2. Python之collections模块详细实例
  3. Python3bytes、hex、字符串之间相互转换
  4. C/C++编程操作Redis数据库,hiredis包装redis数据库操作接口及测试(增删改查与连接)
  5. 汇编语言:编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b段中
  6. CODE[VS] 2824 盗窃-大海的奇迹
  7. bzoj4330:JSOI2012 爱之项链
  8. Java容易搞错的知识点
  9. Android开发学习笔记--一个有界面A+B的计算器
  10. sublime3 常用功能总结