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 ...
随机推荐
- pip 报错找不到pip问题
具体报错如下 解决办法: wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 使用当前python3运行
- javaee 自定义标签实战
用过javaee标准标签库的里的标签应该都知道,标签的存在使得页面上的jsp脚本大大减少,甚至说没有了,大大提高了工作效率,使得页面的整洁性也有了很大的提高.下面我们就 模仿核心标签库中choose标 ...
- 标准C语言(5)
无法预知的数字叫随机数,rand标准函数可以用来获得随机数,为了使用这个标准函数需要包含stdlib.h头文件 srand标准函数用来设置随机数种子,这个函数把一个整数作为种子使用不同的种子可以得到不 ...
- [HDU 3521] [最小割] Being a Hero
题意: 在一个有向图中,有n个点,m条边$n \le 1000 \And \And m \le 100000$ 每条边有一个破坏的花费,有些点可以被选择并获得对应的金币. 假设一个可以选的点是$x$ ...
- Java 实现《编译原理》中间代码生成 -逆波兰式生成与计算 - 程序解析
Java 实现<编译原理>中间代码生成 -逆波兰式生成与计算 - 程序解析 编译原理学习笔记 (一)逆波兰式是什么? 逆波兰式(Reverse Polish notation,RPN,或逆 ...
- 浅析Java web程序之客户端和服务器端交互原理
原文链接: https://www.iteye.com/topic/470019 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考 ...
- nginx设置负载均衡
...... why负载均衡,随着企业业务增长和海量请求,给服务端造成海量并发,导致响应不及时需扩容后端服务,前端需要负载均衡,均摊请求,让服务端吞吐请求的能力提升 单点服务方式,一个点挂掉整个服务就 ...
- JavaScript 函数调用时带括号和不带括号的区别
function countBodyChildren(){ var body_element = document.getElementsByTagName("body")[0]; ...
- Attention机制中权重的计算
Attention mechanism中,给输入序列中对应的每一个Ht分配权重(打分)究竟是如何打分? 输入序列打分,a(s, h) 其中s是输出序列的t-1时刻的隐藏层状态,h是输入的多个状态,
- 使用单调队列维护决策三元组实现决策单调性优化DP的一些细节
以[BZOJ2687]交与并为例给出代码. #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=(a);i< ...