在ListVIew做复用优化的时候,经常会写ViewHolder,还需要很麻烦的去findview,我最讨厌写一堆的这样代码了,今天看到了一个极简的写法,很好用,很简洁啊!!! public static <T extends View> T getAdapterView(View convertView, int id) {        SparseArray<View> viewHolder = (SparseArray<View>) convertView.ge…
public class ViewHolder {     // I added a generic return type to reduce the casting noise in client code     @SuppressWarnings("unchecked")     public static <T extends View> T get(View view, int id) {         SparseArray<View> view…
ViewHolder holder = null;         if(convertView == null){                 convertView = mInflater.inflate(R.layout.xxx null);                 holder = new ViewHolder();                 holder.tvXXX = (TextView)findViewById(R.id.xxx);                …
ListView优化大致从以下几个角度:1.复用已经生成的convertView:2.添加viewHolder类:3.缓存数据(图片缓存):4.分页加载. 具体方案: 1.如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用.在这个方法中尽可能少创建view. 2.给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的…
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建. ListView加载数据都是在public Vie…
1.常驻型广播  常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到.  他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样的方式是静态注冊  以下是配置样例 2<receiver android:name=".widget.DeskWidgeWeather"> 3<meta-data android:name="android.appwidget.provider" an…
引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3.Activity中生命周期对象大于Activity生命周期(关于Application Context与Activity Context) 4.Bitmap对象不使用时没有recycle掉(这里还有其他解决方案) 今天说的是第一种:如何使用缓存来优化ListView 因为如果不使用缓存conver…
1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分为三种:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter. 1.1.ArrayAdapter ArrayAdapter是BaseAdapter的派生类,在BaseAdapter的基础上,添加了一项重大的功能:可以直接使用泛型构造. ArrayAdapter…
1.先写遇到的问题: a.ListView只显示一个item. listview只显示一个item,并且做了listview的点击事件监听打印 Bean 对象的属性和哈希值,发现只有显示的那个 Bean 对象有属性值,其他item显示的 Bean 对象属性值为null,但是 Bean对象有唯一哈希值,说明 Bean 对象成功创建了,但是是什么原因导致其他属性值为空的呢?经过检查发现.每个对象是创建出来了,创建了第二个对象时,本来用第二个对象去引用属性值,结果用了第一个去引用属性值. 错误代码:…
原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪些方法技巧来优化ListView的效率. 一.使用convertView 前面讲的自定义ArrayAdapter和自定义BaseAdapter,都会重写getView()方法,虽然可以正常使用,但其实效率非常低.当列表项很多时,用户每次滚动屏幕,都会创建一批新的View对象,以填充新出现的列表项,这…
这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多.所以学习了关于listview的优化,并且这也是普遍使用的方法.我们一般来说创建listview的话更常用的是继承BaseAdapter的方式进行实现,因为这样可以自定义list没一个item的布局,根据程序的需求进行定制,一般来说listview所展示的数据都是比较多的,一般也有比较少的.所以,不对adapter进行优化的话,那么每一次拖动listv…
ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeight:高度 使用方式,等同于Spinner:ArrayAdapter,SimpleAdapter,BaseAdapter. BaseAdapter: 特点:高度自定义item布局,同时逻辑操作更加丰富. getCount():item的数量 getItem():获取item中的数据 getItemI…
1.概述 ListView是Android中非常常见的控件通过Adapter架起数据与界面显示的桥梁,MVC思想在其中得到了很好地体现: M:model 数据模型    添加到ListView中显示的数据 V:View   视图 在界面中显示的每一条样式(不只是通常的每一条,比如QQ聊天间隔显示的样式) C:Control  控制  通过Activity来协调全局 其中的关键所在就是Adapter(适配器),它就是一座桥梁,Adapter提供对数据的访问,也负责为每个数据产生每个对应的View,…
大家通常怎么写ViewHolder呢? ViewHolder holder = null; if(convertView == null){ convertView = mInflater.inflate(R.layout.xxx null); holder = new ViewHolder(); holder.tvXXX = (TextView)findViewById(R.id.xxx); //...一连串的findViewById } else{ holder = (ViewHolder)…
给学生讲课的时候,发现存在这个问题,下来百度了下,发现很纠结,涉及到了内部类对外部类的引用,静态类的生命周期等java知识,现总结如下: static class ViewHolder { //定义listView item中相应的控件 } 这里的ViewHolder类需不需要定义成static,根据实际情况而定,如果item不是很多的话,可以使用,这样在初始化的时候,只加载一次,可以稍微得到一些优化: 不过,如果item过多的话,建议不要使用.因为static是Java中的一个关键字,当用它来…
安卓开发中ListView控件是一个使用频率相当的高级控件,通常用于展示一系列相似度极高的数据,当数据量极大或布局相当复杂时,ListView的性能优化就显得非常重要.所以在开发中不但功能上要满足,而且在性能上也不能马虎.        使用ListView是一个标准的适配器设计模式,ListView把数据.XML布局和Adapter有极地结合在一起完成一系列的展示功能.在ListView的数据展示中,每次滑动ListView都会触发getView()方法的调用,并且XML定义的布局是在也是在适…
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一块进行优化,我们就需要把find过后的内容进行缓存,所以就用ViewHolder的方法. 这个方法很容易理解,但是可能有些人还是比较较真,就像我,这样可以起到缓存作用,那为什么内部类非得要声明成static的呢,普通的内部类不是也起到这样的效果吗?这个疑问也困扰了我很久.直到我看了<Effectiv…
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; import android.widget.ImageView; import android.wid…
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 goo…
通用viewHolder工具类: public class ViewHolder { // I added a generic return type to reduce the casting noise in client code @SuppressWarnings("unchecked") public static <T extends View> T get(View view, int id) { SparseArray<View> viewHol…
如果有人还不了解ViewHolder为什么可以起到优化作用,我这边再做下简单说明:Android的findViewById动作是比较耗时的,需要遍历布局的树形结构,才能找到相应的视图.所以如果想在这一块进行优化,我们就需要把find过后的内容进行缓存,所以就用ViewHolder的方法. 这个方法很容易理解,但是可能有些人还是比较较真,就像我,这样可以起到缓存作用,那为什么内部类非得要声明成static的呢,普通的内部类不是也起到这样的效果吗?这个疑问也困扰了我很久.直到我看了<Effectiv…
ViewHolder是什么就不解释了.大家通常怎么写ViewHolder呢? ViewHolder holder = null; if (convertView == null) { convertView =mInflater.inflate(R.layout.xxx null); holder = new ViewHolder(); holder.tvXXX = (TextView) findViewById(R.id.xxx); //...一连串的 findViewById } else…
ListView作为Android中最常用的组件之一,其优化方式也比较多. 在使用ListView或是GridView的时候,往往需要自定义数据适配器.一般我们都需要复习getView方法.对于此方法的优化也我们对ListView的优化的重点之一. 1.重用convertView ListView获GrideView要加载View的时候,会调用很多次getView().因此会创建很多的View对象.如果ListView中的数据比较多.那么对于嵌入式的应用程序是吃不消的.好大这里Android提供…
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010785585/article/details/52808656 转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/52808656 [DylanAndroid的csdn博客] 在ListView的Adapter中的getView()方法中的繁琐写法 @Override public View getView(int posi…
先看看ViewHolder通用写法         ViewHolder holder = null;         if(convertView == null){                 convertView = mInflater.inflate(R.layout.xxx null);                 holder = new ViewHolder();                 holder.tvXXX = (TextView)findViewById(…
1.在adapter中的getView方法中尽量少使用逻辑 2.尽最大可能避免GC 3.滑动的时候不加载图片 4.将ListView的scrollingCache和animateCache设置为false 5.item的布局层级越少越好 6.使用ViewHolder 7.加载图片什么的尽量使用弱引用,这样可以防止内存泄露的问题 1.给item的控件比如imageview设置属性的代码放在inflate的时候而不要放在return convertview这最后一句话之前,这样造成了重复设置. 2.…
ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个item,要求 adapter “返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项.如果你的getCount()返回…
ListView的优化: (前两点都是利用ListView的自身优化机制优化[缓存优化]) 1.利用ListView自身的缓存机制,他会缓存条目中的一个条目item,当listview第一屏显示完成之后,就会出现一个缓存条目,其实就是BaseAdapter里面的public View getView(int position, View convertView, ViewGroup parent). 2.减少findViewById()的次数,findViewById是一个相对比较耗性能的操作,…
本文内容:adapter,listview的优化,RecycleBi,google大会推荐优化, 实现ListView的过程,Adapter起到了至关重要的作用,不仅仅因为getview()方法.那么,先从Adapter说起~ Adapter: 它在ListView和数据源之间起到桥梁的作用,避免listview和数据源直接接触,而导致因为数据源的复杂性使listview显得臃肿. Adapter,适配器,把复杂的数据源适配给listview,很容易联想到适配器模式.   下面是几种常用的Ada…
之前我们说到ListView的基本用法.但是,有很多的时候会额外的占用一些内存,从而消耗了性能.既然有消耗性能的可能,那么我们就对其做出相应的优化 我们首先来说说优化的步骤: 第一步.将宽和高设置为填充父窗体,有助于填充item时,避免重复渲染ListView,而导致重复多次调用ListView 第二步.判断getView()方法中的convertView是否为空,如果为空就创建View,不为空就重复使用View 第三步.创建类ViewHolder来解决每次重复查找convertView中的组件…