ListView优化-通用ViewHolder编写备份
ViewHolder.java
package cn.edu.bzu.util; import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; /**
* Created by monster on 2015/4/20.
* Have a good package ViewHolder
* get(Context context,View convertView,ViewGroup parent,int layoutId,int position) To make ViewHolder
*
*/
public class ViewHolder {
private SparseArray<View> mViews; //稀疏数组,SparseArray比HashMap执行效率高
private int mPosition;
private View mConvertView; //作用是方便系统在重写UI时,能重用原来实用过的View实例,以此来降低系统资源的消耗和提高代码效率
/*
*ConvertView的几点特征。
*对于一个ListView,Android保存所有曾经生成过的ConvertView实例,直至系统垃圾回收这些实例位置,而不是只保存最后使用的ConvertView对象。
*这些保存的ConvertView以使用时间顺序排序,并依次被传递到getView函数中。
*/
public ViewHolder(Context context,ViewGroup parent,int layoutId,int position){
//ViewHolder的构造方法
this.mPosition=position;
this.mViews=new SparseArray<View>(); //初始化SparseArray对象
mConvertView= LayoutInflater.from(context).inflate(layoutId,parent,false);
mConvertView.setTag(this);
} public static ViewHolder get(Context context,View convertView,ViewGroup parent,int layoutId,int position){
if(convertView==null){
return new ViewHolder(context,parent,layoutId,position);
}else{
ViewHolder holder=(ViewHolder)convertView.getTag();
holder.mPosition=position;
return holder;
}
} /**
* 通过viewId获取控件
* @param viewId
* @param <T>
* @return
*/
public <T extends View> T getView(int viewId){
View view=mViews.get(viewId);
if(view==null){
view=mConvertView.findViewById(viewId);
mViews.put(viewId,view);
}
return (T)view;
}
public View getConvertView() {
return mConvertView;
}
}
MyAdapterWithCommonViewHolder.java
package cn.edu.bzu.adapter; import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; import java.util.List; import cn.edu.bzu.entity.Bean;
import cn.edu.bzu.listview_demo.R;
import cn.edu.bzu.util.ViewHolder; /**
* Created by monster on 2015/4/19.
*/
public class MyAdapterWithCommonViewHolder extends BaseAdapter {
private LayoutInflater mInflater; //LayoutInflater是用来找layout下xml布局文件,并且实例化
private List<Bean> mlist;
private Context mcontext;
public MyAdapterWithCommonViewHolder(Context context, List<Bean> list) {
mcontext=context;
mInflater=LayoutInflater.from(context); //得到初始化上下文
mlist=list;
}
@Override
public int getCount() {
return mlist.size();
} @Override
public Object getItem(int position) {
return mlist.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=ViewHolder.get(mcontext,convertView,parent,R.layout.listview_item,position);
((TextView)holder.getView(R.id.id_title)).setText(mlist.get(position).getTitle());
((TextView)holder.getView(R.id.id_desc)).setText(mlist.get(position).getDesc());
((TextView)holder.getView(R.id.id_time)).setText(mlist.get(position).getDate());
((TextView)holder.getView(R.id.id_phone)).setText(mlist.get(position).getPhone());
return holder.getConvertView();
} }
【源代码下载链接:https://github.com/monsterLin/ViewHolder_Package】
ListView优化-通用ViewHolder编写备份的更多相关文章
- ListView优化-通用CommonAdapter编写备份
[ps:CommonAdapter基于ViewHolder工具类] CommonAdapter.java package cn.edu.bzu.util; import android.content ...
- ListView优化中ViewHolder要不要定义为static静态内部类?
给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义l ...
- ListView优化为何ViewHolder用static类(转载)
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一 ...
- 【转】ListView优化为何ViewHolder用static类
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一 ...
- listview优化 汇总
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...
- ListView ,GridView 通用适配器
前言 接近半年的时间没有写博客了,今年公司的项目有点多,比较忙,没时间写,这是其一.其次是,这半年来,有时间的时候,我都会看看自己以前写的博客,也许是以前刚刚写博客,经验不足,感觉写出来的博客质量很不 ...
- Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固
1.常驻型广播 常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到. 他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...
- 内存泄露--contentView缓存使用与ListView优化
引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...
- Android——ListView优化
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...
随机推荐
- [JAVA教程] 2016年最新spring4框架搭建视频教程 【尚学堂】
Spring4框架 主讲:邹波 类型:SSH 适合对象:学习完javase.数据库技术.jdbc者 Spring4.0作为一个广泛使用的开源框架,它由Rod Johnson创建.它是为了解决企业应用开 ...
- 判断 JS 中对象的类型
1.typeof 形如 var x = "xx"; typeof x == 'string' typeof(x) 返回类型有:'undefined' “string” 'numbe ...
- JSON返回DateTime/Date('123123123')/解决办法
Date.prototype.format = function (format) //author: meizz { var o = { "M+& ...
- 国内网站常用的一些 CDN 公共库加速服务
CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScri ...
- 通过Ajax实现增删改查
项目链接:https://github.com/shuai7boy/Ajax_CRUD 简要截图:
- Android下的数据储存方式(三)
Android下最好的数据储存方式:关系型数据库sqlite. 数据库的创建:使用SqliteOpenHelper类 结合SqliteOpenHelper类和SQLiteDatabase类的帮 ...
- 《精通CSS网页布局》读书报告 ----2016-12-5补充
第一章:CSS布局基础 1.CSS的精髓是布局,而不是样式哦! (定要好好的研究布局哦,尤其配合html5) 2. html标签的语义性,要好好的看看哦! 3.DTD:文档类型定义. 4.内联--& ...
- Socket,TCP/IP,UDP,HTTP,FTP
1.Socket:套接字,是传输层协议的一种编程API 作用:用于描述IP地址和端口,区分来自不同应用程序的通信,实现数据传输的并发服务 JDK Socket:在java.net包下有两个类Sock ...
- android请求root权限
应用获取Root权限的原理:让应用的代码执行目录获取最高权限.在Linux中通过chmod 777 [代码执行目录] //请求root权限 public static boolean upgra ...
- MySQL的启动脚本
MySQL的启动脚本#!/bin/bashmysql_port=3308mysql_username="admin"mysql_password="password&qu ...