虽然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相关代码整理的更多相关文章

  1. Leafletjs学习教程和相关代码整理

    一.Leaflet简介 官方网站:http://leafletjs.com/ 官网上的api和例子大家多看看,多学习学习. Lefalet 是一个为建设移动设备友好的互动地图,而开发的现代的.开源的 ...

  2. 转:基于IOS上MDM技术相关资料整理及汇总

    一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...

  3. EasyUI相关知识点整理

    EasyUI相关知识整理 EasyUI是一种基于jQuery.Angular..Vue和React的用户界面插件集合.easyui为创建现代化,互动,JavaScript应用程序,提供必要的功能.也就 ...

  4. 基于IOS上MDM技术相关资料整理及汇总

    (转自:http://www.mbaike.net/special/1542.html) 一.MDM相关知识:MDM (Mobile Device Management ),即移动设备管理.在21世纪 ...

  5. 【Anroid】9.1 ListView相关类及其适配器

    分类:C#.Android.VS2015: 创建日期:2016-02-18 一.简介 列表视图(ListView)是Android应用程序中使用最频繁的UI组件,从无处不在短菜单选项列表到冗长的联系人 ...

  6. libmodbus相关资料整理

    /****************************************************************************** * libmodbus相关资料整理 * ...

  7. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

  8. [ARM] Cortex-M Startup.s启动文件相关代码解释

    1. 定义一个段名为CSTACK, 这里: NOROOT表示如何定义的段没有被关联,那么同意会被优化掉,如果不想被优化掉就使用ROOT. 后面的括号里数字表示如下: (1):这个段是2的1次方即2字节 ...

  9. Kafka Producer相关代码分析【转】

    来源:https://www.zybuluo.com/jewes/note/63925 @jewes 2015-01-17 20:36 字数 1967 阅读 1093 Kafka Producer相关 ...

随机推荐

  1. python 解析xml

    在工作中很多时候都要用到xml,使用这个时候难免会设计到解析他,然后就研究了一下python解析xml问题,看了很多东西,python有很多解析xml的包,但是也折腾我好一段时间,最后选择了这个方法. ...

  2. 【NOIP2015提高组】 Day1 T3 斗地主

    [题目描述] 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4& ...

  3. HTML笔记<note2>

    文本标记 我是正常的文本段落 我是用b标记的加粗文本 我是用strong定义的强调文本 i标记的倾斜文本 em强调文本 del标记的删除线 del标记的下划线文本 特殊字符标记 显示 说明 空格&am ...

  4. Servlet 笔记-生命周期

    Servlet 生命周期可被定义为从创建直到毁灭的整个过程.以下是 Servlet 遵循的过程: Servlet 通过调用 init () 方法进行初始化. Servlet 调用 service()  ...

  5. MySql技术内幕之MySQL入门(2)

    MySql技术内幕之MySQL入门(2) 接上一篇. mysql> source create_member.sql; # 创建member表 Query OK, 0 rows affected ...

  6. python异步并发模块concurrent.futures入门详解

    concurrent.futures是一个非常简单易用的库,主要用来实现多线程和多进程的异步并发. 本文主要对concurrent.futures库相关模块进行详解,并分别提供了详细的示例demo. ...

  7. 数据库.MongoDB.安装MongoDB数据库

    树莓派安装方法 版本: mongodb 2.4.10 sudo apt-get install mongodb -y 安装完成后,检查命令 mongo 看到下图的内容,表示已安装并启动成功 ===== ...

  8. Mysql 用户,权限管理的几点理解。

    前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql. 公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂..简单是因为网上关于m ...

  9. angular指令中的preLink函数和postLink函数

    指令模板选项有complie和link两个字段,两者之间存在如下关系: 当compile字段存在时,link字段将被忽略,compile函数的返回值将作为link字段. 当compile不存在,lin ...

  10. Ionic3 下拉刷新

    参考: http://ionicframework.com/docs/api/components/refresher/Refresher/