android listview 连续调用 getview问题分析及解决。

当我们在使用listview的时候。有时候自定义adapter的时候,是不是会发现在getview里打印日志的时候,重复调用很多次?有时候4次。有的严重甚至到10次,当我们在listview中移动的时候。每移动一列都会调用很多次,这样大大影响到效率!其实这和listview本身在android上的机制有关。下面我开始来介绍一下吧:

在布局,我们只有一个listview的时候。那好。我们把高设置成wrap_content的时候。在listview里加载几行看看。日志在getview里打印一下。是不是重复调用了?那这个办法就好弄了。把高设置成fill_parent就成了。这个时候发现日志还是重复调用?那就要看一下Listview的上一级而已的高是不是也是设置也fill_parent的,如果不是。请改动吧。如果是。。。那我还真没碰到重复调用的!因为测试好几次了!

如果我们在而已里不只一个Listview。一个复杂好看的布局可能有很多。listview在布局的某个地方。这个时候有时候运气不好。你会发现你调用了很多次getview。我测试的时候。最高230次。。。可想而知。这个速度是相当慢。而且每移动一次就是调用这么多次!对于这样的情况,在修改布局的时候,要考虑以下两点:1.首先考虑需求布局和性能哪个更重要一点。2.考虑listview周边哪个布局控件影响到了它!

如果在性能上没有太大影响,而需求要求必需是那样的布局。那就以布局为主。看看有没有别的方法来优化一下listview,当然前提是布局一点都不能调整。如果能调整,布局没有太大变动。而listview又能很好的优化。那就当然优化了!当我们优化的时候。首先要看一下有没有影响到Listview重绘的控件,比如。如果它上面和下面都有控件。而且高都是wrap_content,那么你就要设置成fill_parent或者固定高。这样listview在高上就不会重绘,这是最主要的一点。那左右是不是也有控件(一般一个手机页面用到list的时候不会有这么多控件)?有,那我们就也要调整,那就同高一样的设置。一定要让listview是一个固定在那个地方不动的。不然,你就等着让他重复去调用吧!

其实说了这么多。最主要的还是在我们进行布局的时候。要巧妙的运用每个控件的属性,以及了解控件每个的原理。这样在我们进行UI设计的时候,才能很好的去结合!

终于说的差不多了。以后会坚持来写自己的经验以及别人的经验分享给大家!吃饭。。。。

吃饭前说一句。这是原创。用之前得说明出处。不然。。。你懂的!

时间: 2024-10-14 09:26:28

android listview 连续调用 getview问题分析及解决。的相关文章

android listview 不显示选中效果分析

android listview有时会发现没有选中效果,解决办法 1:listview布局中设置颜色,如 android:background="@android:color/white" 2:在listview的item布局文件中背景设置为 android:background="@android:color/transparent" 原因:颜色设置在整体的listview上面,每一行布局设置透明色即可 android listview 不显示选中效果分析

Android Listview addHeaderView setadapter的时候莫名NullPointerException 解决

解决  Android Listview addHeaderView setadapter的时候莫名NullPointerException 改代码的时候碰到的bug Bug 1: E/AndroidRuntime(15920): java.lang.RuntimeException: Unable to start activity ComponentInfo{ }: android.view.InflateException: Binary XML file line #35: Error

Android LIstView初次创建getview方法执行多次问题

写listview优化的时候,发现Listview初次创建的时候会多次执行getView方法. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools&quo

Android ListView getView()方法重复调用导致position错位

问题现状:Android ListView getView()方法重复调用导致position错位 解决办法:把ListView布局文件的layout_height属性改为fill_parent或者match_parent. <ListView android:id="@+id/myphoto_listview" android:layout_width="match_parent" android:layout_height="match_pare

android ListView 多次调用 getView方法

<ListView            android:layout_width="match_parent"            android:layout_height="match_parent"             android:id="@+id/alarm_list"></ListView> ListView 的高度 必须要设置成一个明确的值 或者match_parent  不然就会调用多次getVi

Android ListView异步加载图片乱序问题,原因分析及解决方案

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/45586553 在Android所有系统自带的控件当中,ListView这个控件算是用法比较复杂的了,关键是用法复杂也就算了,它还经常会出现一些稀奇古怪的问题,让人非常头疼.比如说在ListView中加载图片,如果是同步加载图片倒还好,但是一旦使用异步加载图片那么问题就来了,这个问题我相信很多Android开发者都曾经遇到过,就是异步加载图片会出现错位乱序的情况.遇到这个问题时,不

自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟

相信很多人在使用自定义Adapter的时候都遇到这样的问题: 假设Adapter数据源中只有30个Item,理论上每显示一个新的Item的时候就会调用一次getView,均显示一次的话是要调用getView() 30次的,然而当我们在getView输出Log信息时,前几个会被重复多轮调用,之后每滑动到一个新的Item便会正常调用getView? 针对这个问题,网上很多帖子指明这与ListView的Item的高度计算方法有关,并强调解决该问题的办法是在XML文件里面定义listView的时候需要设

android ListView 中getview学习总结

最近在做android相关的开发,ListView中有一个图片错位的问题,今天查了很多人写的一些东西,所以记录下来,算是一种加深理解吧. ListView是一个非常常用的控件,功能可以扩展的很丰富,而且与GridView有很多相似的地方.都可以存放大量数据.而且当我们需要比较复杂的布局时,一般用SimpleAdapter,或者继承BaseAdapter自己重写. 如果是继承ArrayAdapter,SimpleAdapter的时候,由于父类本身维护了一个List,所以当有数据更新的时候,尽量用a

Android ListView滑动过程中控件显示重复/错误问题之原理分析及解决方案

前言: 为了使ListView性能更优,最普遍的方法就是添加一个ViewHolder静态类. 虽然性能有很大的提高,但是同样也伴随着Item控件内容显示重复或错乱的情况. 分析并解决如下两个问题 一.控件数据未初始化而导致的显示错误. 二.网络异步加载导致出现显示错误.重复. 如下我们来简单分析一下ListView的缓存机制.我们整篇文章均以下图的模型来举例说明. (图片转至http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.h