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相关 ...
随机推荐
- Java 线程并发
http://www.yesky.com/9/1899009.shtml http://zhidao.baidu.com/link?url=-xZ9JLo5x4bvCSVyXb2XhO6TODnBcU ...
- 人工智能 tensorflow框架-->简介及安装01
简介:Tensorflow是google于2015年11月开源的第二代机器学习框架. Tensorflow名字理解:图形边中流动的数据叫张量(Tensor),因此叫Tensorflow 既 张量流动 ...
- .NET企业级应用WebService上传下载文件
在建立好一个WebService后会有一个自带的 [WebMethod]//在待会写的所有方法中都要写这个,便于调试 public string HelloWorld() { return " ...
- ThreadPoolExecutor系列<二、ThreadPoolExecutor 代码流程图>
本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681648.html 1.ThreadPoolExecutor代码 ...
- javascript 之基本包装类型--04
基本包装类型 基本包装类型是特殊的引用类型.每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用属性.方法来进行后续操作. ECMAScript还提供了三种基本包装类型 ...
- mybatis返回int类型报null
解决这个问题,是当查出来为NULL时,结一个默认值,如:0. MySQL: SELECT IFNULL(MAX(id),0)AS sort FROM table Oracle: SELECT nvl( ...
- LeetCode 543. Diameter of Binary Tree (二叉树的直径)
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...
- How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
############################### PART ONE ############################### #1. Introduction of the ...
- Coursera上视频无法播放将怎么解决?
相信很多朋友在播放Coursera中的视频都会遇到一个问题,视频全黑,点击播放,进度条转了一圈又消失不见. 这时候我们该找找是什么问题啦? 解决方法一: 如果你是FQ看的网课视频,那么你把VPN从au ...
- JS是按值传递还是按引用传递?【转载】
最近遇到个有趣的问题:“JS中的值是按值传递,还是按引用传递呢?” 在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference). ...