listview相关代码整理
虽然listview已经慢慢被替代了, 不过还是整理下 , 留作纪念吧
/**
* 获取 listview 实际滚动的距离. [ 相对于listview的第一个项目左上角.]
*
* @return
*/
public static synchronized int getScrollY(AbsListView listView) {
if (null == listView)
return 0; View c = listView.getChildAt(0);
if (c == null) {
return 0;
} int firstVisiblePosition = listView.getFirstVisiblePosition();
int top = c.getTop(); int mMax = 0;
for (int i = 0; i < firstVisiblePosition; i++) {
View v = listView.getChildAt(i);
if (null != v) {
mMax += v.getHeight();
}
} return (-top + mMax);
}
一个封装过的通用adapter
public abstract class BaseAdapterEx<D, VH extends BaseAdapterEx.ViewHolder> extends BaseAdapter {
protected int[] mResIds = null;
protected Context mContext;
protected LayoutInflater mInflater;
/**
* 支持创建多种格式的布局文件. 默认获取资源对应方式为: resIds[ position % resIds.length ]
*
* @param context
* @param resIds
*/
public BaseAdapterEx(Context context, int... resIds) {
this.mContext = context;
this.mResIds = resIds;
mInflater = LayoutInflater.from(mContext);
}
@Override
public boolean isEnabled(int position) {
return mData == null || mData.size() > position;
}
protected final Object mLocker = new Object();
protected List<D> mData = new ArrayList<D>();
public void clear() {
synchronized (mLocker) {
if (!mData.isEmpty()) {
mData.clear();
notifyDataSetChanged();
}
}
}
public List<D> getData() {
return mData;
}
public void setData(Collection<D> data) {
synchronized (mLocker) {
mData.clear();
mData.addAll(data);
notifyDataSetChanged();
}
}
public void setData(D[] data) {
setData(Arrays.asList(data));
}
public D getItem(int position) {
if (position >= && mData != null && position < mData.size()) {
return mData.get(position);
}
return null;
}
@Override
public int getCount() {
return (null == mData ? : mData.size());
}
@Override
public boolean areAllItemsEnabled() {
return super.areAllItemsEnabled();
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
VH holder = null;
if (null == convertView) {
convertView = onCreateView(position, parent);
holder = onCreateViewHolder(position, convertView);
if (null != convertView) {
convertView.setTag(holder);
}
} else {
holder = (VH) convertView.getTag();
}
onBindViewHolder(position, holder);
return convertView;
}
/**
* bind data to the view.
*
* @param position
* @param holder
*/
protected abstract void onBindViewHolder(int position, VH holder);
/**
* create ViewHolder, never return null.
*
* @param position
* @param convertView
* @return
*/
protected abstract VH onCreateViewHolder(int position, View convertView);
protected View onCreateView(int position, ViewGroup parent) {
int resId = getResId(position);
if ( != resId) {
return mInflater.inflate(resId, parent, false);
}
return null;
}
/**
* 获取具体的资源文件ID.
*
* @param position
* @return
*/
protected int getResId(int position) {
if (null != mResIds && mResIds.length > ) {
return mResIds[position % mResIds.length];
}
return ;
}
public static class ViewHolder {
public View itemView;
public ViewHolder() {
}
public ViewHolder(View itemView) {
this.itemView = itemView;
}
}
}
listview相关代码整理的更多相关文章
- Leafletjs学习教程和相关代码整理
一.Leaflet简介 官方网站:http://leafletjs.com/ 官网上的api和例子大家多看看,多学习学习. Lefalet 是一个为建设移动设备友好的互动地图,而开发的现代的.开源的 ...
- 转:基于IOS上MDM技术相关资料整理及汇总
一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...
- EasyUI相关知识点整理
EasyUI相关知识整理 EasyUI是一种基于jQuery.Angular..Vue和React的用户界面插件集合.easyui为创建现代化,互动,JavaScript应用程序,提供必要的功能.也就 ...
- 基于IOS上MDM技术相关资料整理及汇总
(转自:http://www.mbaike.net/special/1542.html) 一.MDM相关知识:MDM (Mobile Device Management ),即移动设备管理.在21世纪 ...
- 【Anroid】9.1 ListView相关类及其适配器
分类:C#.Android.VS2015: 创建日期:2016-02-18 一.简介 列表视图(ListView)是Android应用程序中使用最频繁的UI组件,从无处不在短菜单选项列表到冗长的联系人 ...
- libmodbus相关资料整理
/****************************************************************************** * libmodbus相关资料整理 * ...
- BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js
BAT 前端开发面经 —— 吐血总结 目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...
- [ARM] Cortex-M Startup.s启动文件相关代码解释
1. 定义一个段名为CSTACK, 这里: NOROOT表示如何定义的段没有被关联,那么同意会被优化掉,如果不想被优化掉就使用ROOT. 后面的括号里数字表示如下: (1):这个段是2的1次方即2字节 ...
- Kafka Producer相关代码分析【转】
来源:https://www.zybuluo.com/jewes/note/63925 @jewes 2015-01-17 20:36 字数 1967 阅读 1093 Kafka Producer相关 ...
随机推荐
- python 解析xml
在工作中很多时候都要用到xml,使用这个时候难免会设计到解析他,然后就研究了一下python解析xml问题,看了很多东西,python有很多解析xml的包,但是也折腾我好一段时间,最后选择了这个方法. ...
- 【NOIP2015提高组】 Day1 T3 斗地主
[题目描述] 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4& ...
- HTML笔记<note2>
文本标记 我是正常的文本段落 我是用b标记的加粗文本 我是用strong定义的强调文本 i标记的倾斜文本 em强调文本 del标记的删除线 del标记的下划线文本 特殊字符标记 显示 说明 空格&am ...
- Servlet 笔记-生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程.以下是 Servlet 遵循的过程: Servlet 通过调用 init () 方法进行初始化. Servlet 调用 service() ...
- MySql技术内幕之MySQL入门(2)
MySql技术内幕之MySQL入门(2) 接上一篇. mysql> source create_member.sql; # 创建member表 Query OK, 0 rows affected ...
- python异步并发模块concurrent.futures入门详解
concurrent.futures是一个非常简单易用的库,主要用来实现多线程和多进程的异步并发. 本文主要对concurrent.futures库相关模块进行详解,并分别提供了详细的示例demo. ...
- 数据库.MongoDB.安装MongoDB数据库
树莓派安装方法 版本: mongodb 2.4.10 sudo apt-get install mongodb -y 安装完成后,检查命令 mongo 看到下图的内容,表示已安装并启动成功 ===== ...
- Mysql 用户,权限管理的几点理解。
前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql. 公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂..简单是因为网上关于m ...
- angular指令中的preLink函数和postLink函数
指令模板选项有complie和link两个字段,两者之间存在如下关系: 当compile字段存在时,link字段将被忽略,compile函数的返回值将作为link字段. 当compile不存在,lin ...
- Ionic3 下拉刷新
参考: http://ionicframework.com/docs/api/components/refresher/Refresher/