BaseAdapter的抽取
为了更方便高效的使用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);
}
BaseAdapter的抽取的更多相关文章
- Android BaseAdapter的使用
数据适配器有很多种,今天在这里记录一下最通用是适配器BaseAdapter. 首先说一下什么是适配器,这里我从网上找到一幅图片 由上图我们不难看出,所谓的适配器,就是数据与视图之间的桥梁.由它把数据绑 ...
- BaseAdapter优化深入分析
BaseAdapter是一个数据适配器,将我们提供的数据格式化为ListView可以显示的数据,BaseAdapter的优化直接影响到ListView的显示效率. 我们都知道,ListView自带有回 ...
- 9.代码抽取(adapter)
1 抽取Adapter 共性的方法 2 把getView方法里 和holder相关的逻辑 摘取到Holder代码中 3 把Holder 相关的代码 抽取到BaseHolder中 4 把ada ...
- 使用rowid抽取数据方法以及大数据量游标卡住的应对
平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...
- TODO:从数据库中随机抽取一条记录
TODO:从数据库中随机抽取一条记录 1.最直接,最粗暴的方法先计算记录的总数,然后选择一个从0到记录总数之间的随机数n,利用skip跳过n条记录,这是效率低下的的方法,首先的记录总数,在用skip会 ...
- Android笔记——BaseAdapter的使用
Android中的适配器(Adapter)是数据与视图(View)之间的桥梁,用于对要显示的数据进行处理,并通过绑定到组件进行数据的显示. BaseAdapter是Android应用程序中经常用到的基 ...
- 【NLP】Tika 文本预处理:抽取各种格式文件内容
Tika常见格式文件抽取内容并做预处理 作者 白宁超 2016年3月30日18:57:08 摘要:本文主要针对自然语言处理(NLP)过程中,重要基础部分抽取文本内容的预处理.首先我们要意识到预处理的重 ...
- SQL Server 随机数,随机区间,随机抽取数据rand(),floor(),ceiling(),round(),newid()函数等
在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数.那就看下面 ...
- Android关于listView的BaseAdapter以及getView的三级优化
1.4个重写方法的含义 自定义Adapter继承自BaseAdapter(通用适配器) getCount(); getItem(); getItemId(); getViewTypaCount() ...
随机推荐
- HTTPS那些事(二)SSL证书(转载)
原创地址:http://www.guokr.com/post/116169/ 从第一部分HTTP工作原理中,我们可以了解到HTTPS核心的一个部分是数据传输之前的握手,握手过程中确定了数据加密的密 ...
- 初学者--bootstrap(五)JavaScript插件(上)----在路上(6)
jQuery 插件为 Bootstrap 的组件赋予了“生命”.可以简单地一次性引入所有插件,或者逐个引入到你的页面中. 一:首先要确认的是,单个还是全部引入: JavaScript 插件可以单个引入 ...
- iOS-C基础
iOS开发系列--C语言之基础知识 概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(i ...
- WPF入门教程系列十六——WPF中的数据绑定(二)
三.绑定模式 通过上一文章中的示例,学习了简单的绑定方式.在这里的示例,要学习一下绑定的模式,和模式的使用效果. 首先,我们来做一个简单示例,这个示例是根据ListBox中的选中项,去改变TextBl ...
- MySQL_02之增删改查、PHP数据库操作
1.数据操作: ①插入记录: 插入单条记录:INSERT tbl_name(字段名称,--) VALUES(字段值,--); 插入多条记录:INSERT tbl_name(字段名称,--) VAL ...
- HTTP学习二:Web应用中的HTTP
1 HTTP连接 1.1 TCP连接对性能的影响 TCP三次握手如下图: 如上图,建立一次TCP连接要经过三个步骤.HTTP是建立在TCP之上的,因此TCP连接的性能直接影响HTTP的性能. TCP影 ...
- Derived Column 用法
Derived Column Component 用法是为数据流增加派生列,Derived column 有两种用法:add as new column 或 replace . 图中,增加一个 De ...
- socket编程
一.socket地址的数据类型及相关函数 socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4.IPv6.UNIX Domain Socket.然而各种网络协议的地址格式并 ...
- C#中的readonly与const的比较
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋 ...
- .Net 转战 Android 4.4 日常笔记(5)--新软件Android Studio 0.5.8安装与配置及问题解决
说真心话,Eclipse跟我们.net的VS比起来就是屌丝比高富帅,一切都是那么的难用,速度慢得我无法忍受 于是想试试Google钦点的Android Studio IDE工具,这跟ADT一样也是一套 ...