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相关 ...
随机推荐
- win10 uwp 视差效果
本文翻译:http://jamescroft.co.uk/blog/uwp/playing-with-scrolling-parallax-effects-on-ui-elements-in-wind ...
- 简易RPC框架-客户端限流配置
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- 【持续更新】.Net 开发中给自己埋下的坑!
1.文件“XXX”正在由另一进程使用,因此该进程无法访问此文件. 原因剖析:文件在主线程操作,在子线程中读写操作文件,刚开始没有意识到程序的问题所在,总是在FileStream中报错,google后常 ...
- Javascript中NaN、null和undefinded的区别
var a1; var a2 = true; var a3 = 1; var a4 = "Hello"; var a5 = new Object(); var a6 = null; ...
- MongoDB查询分析
MongoDB 查询分析可以确保我们建立的索引是否有效,是查询语句性能分析的重要工具.MongoDB 查询分析常用函数有:explain() 和 hint(). 1. explain(): 提供查询信 ...
- LeetCode 339. Nested List Weight Sum (嵌套列表重和)$
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- iOS初学,关于变量加下划线问题
为什么做ios开发,变量前要加下划线才有用? 看到这个哥们的解释后,终于明白了,转帖到此. 链接在此:http://www.cocoachina.com/bbs/read.php?tid=234290 ...
- co源码分析及其实践
本文始发于我的个人博客,如需转载请注明出处. 为了更好的阅读体验,可以直接进去我的个人博客看. 前言 知识储备 阅读本文需要对Generator和Promise有一个基本的了解. 这里我简单地介绍一下 ...
- 用Unity3d做游戏(一)
准备工作: vs2013,直接从官网下载或者这里 http://pan.baidu.com/s/1bFxC54 unity3d,从官网下载,版本4或者5 https://unity3d.com/c ...
- Ionic3 创建应用后,目录结构
ionic start myApp blank (空项目) hooks --编译cordova时自定义的脚本命令,方便整合到我们的编译系统和版本控制系统中 node_modules --node各类依 ...