ListView的MyBaseAdapter的封装
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter; import java.lang.reflect.Array;
import java.util.ArrayList; import cn.loaderman.holder.BaseHolder;
import cn.loaderman.holder.HomeHolder;
import cn.loaderman.utils.ItemAnimationUtils; import static android.icu.lang.UCharacter.GraphemeClusterBreak.T; /**
*
* 封装的思想:
* 抽取基类:
* 在基类中做的一般都是通用的事情
* 不通用的事情
* 1、父类不知道如何完成的事情,通过抽象方法来交给子类实现
* 2、父类不知道的数据类型,通过泛型来解决,泛型是自定义的一种不存在的类型,这种类型究竟是啥,在定义子类的时候确定
* 尖括号的位置
* 如果在自己的类名后面,代表定义了一个泛型
* 如果跟在父类的名称后面,代表确定父类所定义的泛型类型
*
*/ public abstract class MyBaseAdapter<T> extends BaseAdapter { private ArrayList<T> dataList; public MyBaseAdapter(ArrayList<T> dataList) {
this.dataList = dataList;
} @Override
public int getCount() {
return dataList.size();
} @Override
public Object getItem(int position) {
return dataList.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
BaseHolder holder = null;
if(convertView == null) {
holder = getHolder(position);
} else {
holder = (BaseHolder) convertView.getTag();
} holder.setData(dataList.get(position)); ItemAnimationUtils.startAnim(holder.convertView); return holder.convertView;
} public abstract BaseHolder getHolder(int position);
}
BaseHolder.java
import android.view.View;
/**
* 1、加载布局文件 convertView,布局文件的id
* 2、初始化控件 TextView、convertView、Holder
* 3、存储holder Holder、convertView
* 4、刷新控件的数据 TextView、数据
*/ public abstract class BaseHolder<T> {
public View convertView;
public T data;
public BaseHolder() {
convertView = initView();
convertView.setTag(this);
}
public void setData(T data) {
if(data != null) {
this.data = data;
}
refreshView();
}
public abstract View initView() ;
public abstract void refreshView();\
}
ItemAnimationUtils.java
public class ItemAnimationUtils { public static void startAnim(View view) { ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view,"alpha",0.0f,1.0f);
objectAnimator.setDuration(500);
objectAnimator.start(); /*AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
alphaAnimation.setDuration(500);
alphaAnimation.setFillAfter(true);*/ //view.setScaleX(); /*view.setPivotX(0);
view.setPivotY(0);*/
ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(view,"scaleX",0.5f,1.0f);
objectAnimatorX.setDuration(500);
objectAnimatorX.start();
ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(view,"scaleY",0.5f,1.0f);
objectAnimatorY.setDuration(500);
objectAnimatorY.start(); /* ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f,1.0f,0.5f,1.0f); scaleAnimation.setDuration(500);
scaleAnimation.setFillAfter(true); AnimationSet animationSet = new AnimationSet(true);
//设置动画的插入器
animationSet.setInterpolator(new OvershootInterpolator(2)); animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(scaleAnimation); view.startAnimation(animationSet);*/ }
}
ListView的MyBaseAdapter的封装的更多相关文章
- 安卓v7支持包下的ListView替代品————RecyclerView
RecyclerView这个控件也出来很久了,相信大家也学习的差不多了,如果还没学习的,或许我可以带领大家体验一把这个艺术般的控件. 项目已经同步至github:https://github.com/ ...
- .net类库里ListView的一个BUG
今天在CSDN论坛里看一个帖子,说是在ListView中添加了条目后第一行内容不显示,为了还原他的问题我写了以下代码. private void LoadFiles(DirectoryInfo dir ...
- android listview 替代品recyclerview详解
安卓v7支持包下的ListView替代品————RecyclerView RecyclerView这个控件也出来很久了,相信大家也学习的差不多了,如果还没学习的,或许我可以带领大家体验一把这个艺术 ...
- 老潘 - ListView分析 - 学以致用篇(一)
ListView分析学以致用篇(1) 在我们查看别人的博客的时候,一个人是一个风格的.先说下我的风格,我喜欢思想类比,然后介绍知识,不太喜欢填鸭式的灌输.如果只是想单纯的从我的博客中直接看到代码,我个 ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
- 打造android偷懒神器———RecyclerView的万能适配器
转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...
- Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器
一.写在前面: 本次我们来讲解一下Android应用中三个适配器:BaseAdapter.SimpleAdapter和ArrayAdapter.其中常见的是BaseAdapter,也是个人推荐使用的适 ...
- Android-Sqlite数据库的操作
Sqlite数据库的简单操作: 设置增删改查的按钮,xml界面布局设置 <?xml version="1.0" encoding="utf-8"?> ...
- Android -- 官方下拉刷新SwipeRefreshLayout
V4的兼容包 API 大概就这4个常用的方法. code 布局 <RelativeLayout xmlns:android="http://schemas.android.com/ap ...
随机推荐
- Delphi 数组与记录类型
- mysql将一个表中字段A的值赋给另一个表的字段B
# mysql 的修改方法 update table_a a inner join table_b b on b.id=a.id set a.description=b.content; # mssq ...
- jedis基本操作命令
1.对value操作的命令 exists(key):确认一个key是否存在 del(key):删除一个key type(key):返回值的类型 keys(pattern):返回满足给定pattern的 ...
- selenium-Xpath使用方法
01:什么是Xpath Xpath是一门xml文档中查找信息的语言,Xpath可用来在xml文档中对元素和属性进行遍历,主流的浏览器都支持xpath,因为HTML页面在DOM中表示xhtml文档 xp ...
- java web 域对象
四大域对象 pagecontext 表示的是当前页面的域对象Request表示的是请求域中的对象session 表示的是一次会话中的对象application表示的是在一次tc启动到一次关闭的时候 ...
- LightOJ-1104-birthday Paradox(概率)
链接: https://vjudge.net/problem/LightOJ-1104 题意: Sometimes some mathematical results are hard to beli ...
- wx小程序知识点(五)
五.双向绑定和 vue 的区别 ① vue 中实现双向绑定只需要修改 this.data var vm = new Vue({ el: '#example', data: { message: 'He ...
- 闰年计算——JavaScript 语言计算
㈠闰年是如何来的? 闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的.补上时间差的年份为闰年. ㈡什么是闰年? 凡阳历中有闰日(二月为二十九日)的年, ...
- jquery pageY属性 语法
jquery pageY属性 语法 作用:pageY() 属性是鼠标指针的位置,相对于文档的上边缘.直线模组 语法:event.page 参数: 参数 描述 event 必需.规定要使用的事件 ...
- luoguP1636 Einstein学画画 x
P1636 Einstein学画画 题目描述 Einstein学起了画画, 此人比较懒--,他希望用最少的笔画画出一张画... 给定一个无向图,包含n 个顶点(编号1~n),m 条边,求最少用多少笔可 ...