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相关 ...
随机推荐
- Loadrunner检查点使用总结
在使用Loadrunner进行性能测试中,有时需要对性能测试中的功能是否全部正确进行判断.这里就需要用到“检查点”,本文总结了常用三种协议下检查点的使用方法,希望阅读本文后的小伙伴们能够掌握其使用方法 ...
- ajax 轮询 和 php长连接
只看加粗的字体 js 部分 1: ajax 成功回调函数中 一定要用时间函数间隔调用 get_comment(). get_comments('init'); function ...
- Jquery的树插件jqxTreeGrid的使用小结
一.引入相应的js <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" t ...
- java web 入门级 开发 常用页面调试方法
这里介绍一下Java web 入门级开发中常用的代码调式方法; ( 仅供入门级童靴 参考) ; 工具: chrome 浏览器 (版本越高越好); Java web 入门级开发 主要就是两个方面: ...
- LeetCode 268. Missing Number (缺失的数字)
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...
- struts2类型转换相关问题
一.类型转化错误时,如何处理? 若Action类没有实现ValidationAware接口,在类型转化错误时,struts2会继续调用action方法,将该属性值置为默认值,不报错. 若Action类 ...
- Bootstrap的核心——栅格系统的使用
前 言 絮叨絮叨 Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 而栅格系统是Bootstrap中的核心,正是因为栅格系统的 ...
- Linux 源码编译Python 3.6
Linux 源码编译Python 3.6 1.操作系统以及版本显示 # uname -sr Linux 3.10.0-514.el7.x86_64 # uname -sr Linux 3.10.0-5 ...
- dynamic_cast 转换示例
dynamic_cast 转换示例 /* 带虚函数与不带虚函数转换的区别 dynamic_cast:必须要有虚函数才可以转换 dynamic_cast:只能处理转换指针或引用,不能转换对象 dynam ...
- JQuery Deferred 对象剖析
JQuery 中利用 Deferred 对象提供类似 ES2016(aka. es7) 中 Promise 的功能. JQuery 中的 AJAX 请求函数返回的就是 Deferred 对象. 通过使 ...