ListView的高级封装
来源:互联网 发布:壮游科技和塔人网络 编辑:程序博客网 时间:2024/06/05 01:10
需求:当程序中有大量的listView时封装能大大减少代码的书写量。
思路:抽取不变的方法,将不变的交给子类实现
步骤:先将普通的代码写出来,不断抽象,解决不掉的,交给抽象方法。
代码:
Adapter的封装:
public abstractclass MyBaseAdapter<T> extends BaseAdapter {
privateArrayList<T> list;
privateContext context;
//需要数据
//需要context对象
publicMyBaseAdapter(ArrayList<T> list,Context context) {
this.list= list;
this.context= context;
}
@Override
publicint getCount() {//返回item的数量
returnlist.size();
}
@Override
publicT getItem(int position) {//返回具体item上的数据或者对象
returnlist.get(position);
}
@Override
publiclong getItemId(int position) {//返回item的id
returnposition;
}
@Override //返回具体item的布局对象
publicView getView(int position, View convertView, ViewGroup parent) {
BaseHolderholder;
if(convertView==null) {
holder= getHolder(context);//获取布局对象
convertView= holder.getRootView();
}else{
holder= (BaseHolder) convertView.getTag();
}
//给对应的item设值
holder.setData(getItem(position));
returnconvertView;
}
publicabstract BaseHolder<T> getHolder(Context context);
}
ViewHolder的封装:
public abstractclass BaseHolder<T> {
privateView mRootView;// 是每个item的布局
privateT data;
publicBaseHolder(Context context) {
mRootView= initView(context);
mRootView.setTag(this);//③设置tag
}
//①加载布局,②findViewById(),不知道具体对象,交给子类实现
publicabstract View initView(Context context);
//将item对象返回
publicView getRootView() {
returnmRootView;
}
//④设置数据,具体交给子类
publicabstract void refreshData(T data);
//接收数据,才能将数据设置给对应item
publicvoid setData(T data) {
this.data= data;
refreshData(data);
}
//将对应item的数据暴露出去,以便使用
publicT getData() {
returndata;
}
}
子类必须实现布局和数据设置:
public classViewHolder extends BaseHolder<String> {
publicViewHolder(Context context) {
super(context);
}
@Override
publicView initView(Context context) {//必须由子类实现
returnnull;
}
@Override
publicvoid refreshData(String data) {//设置数据,必须由子类实现
}
}
- ListView的高级封装
- Android之ListView的高级封装!
- Tensorflow的高级封装
- Handler 的高级封装
- Listview的适配器封装
- listview的封装使用
- Listview的高级应用
- listView的高级写法
- listview的高级操作
- ListView的高级使用
- ListView中数据的封装
- Android---封装ListView的Adapter
- ListView 及Recyclerview的封装
- 二、ListView的高级优化
- ListView封装
- ListView封装
- ListView高级
- OkHttp:一次不太高级的封装
- Python暴力猜解Web应用
- vj Fox and Cross
- String,StringBuffer 和StringBuilder
- Cocoapods以及Facebook Pop的安装
- 头文件和库函数的区别
- ListView的高级封装
- xtu补考题解
- Java连接数据库的两种方法
- 重绘与回流——影响浏览器加载速度
- 初碰Java垃圾回收机制
- jsp ----session
- XTOJ 1243 2016【矩阵快速幂取模】
- 突然发现的新姿势
- AdaBoost算法