Android ListView的getview()中position错位 重复调用(position重复调用)
2013-05-09 19:44
330 查看
重写的listview adapter中,在getView()方法中,打印语句时,相同的position打印了多次,修改方法:
将布局文件中ListView的高度改为“fill_parent”
<ListView
android:id="@+id/dynamic_list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:scrollbars="vertical"
android:layout_weight="1"
android:drawSelectorOnTop="false"
android:fadingEdgeLength="0dip"
android:divider="@null"
android:dividerHeight="0dip"
android:cacheColorHint="#00000000"
android:background="@color/listview_bg_color" />
原因,参考:http://blog.csdn.net/f8376904110/article/details/6460934
当我们在使用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设计的时候,才能很好的去结合!
将布局文件中ListView的高度改为“fill_parent”
<ListView
android:id="@+id/dynamic_list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:scrollbars="vertical"
android:layout_weight="1"
android:drawSelectorOnTop="false"
android:fadingEdgeLength="0dip"
android:divider="@null"
android:dividerHeight="0dip"
android:cacheColorHint="#00000000"
android:background="@color/listview_bg_color" />
原因,参考:http://blog.csdn.net/f8376904110/article/details/6460934
当我们在使用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设计的时候,才能很好的去结合!
相关文章推荐
- Android ListView的getview()中position错位 重复调用(position重复调用)
- Android ListView getView()方法重复调用导致position错位
- Android ListView的getview()中重复调用(position重复调用)
- Android ListView的getview()中重复调用(position重复调用)
- Android ListView的getview()中重复调用(position重复调用)
- Android中ListView的适配器中getView()被重复调用的原因及解决方案.
- 【Android】ListView中getView的原理与解决多轮重复调用的方法
- Android listview&gridview getview 方法多次调用问题解决方法--->导致gridview错位
- 关于重写的listview adapter中,在getView()方法中,打印语句时,相同的position打印了多次,重复调用问题
- Android ListView 重复调用getView问题
- android:ListView滑动时图片重复加载,多次调用了GetView().
- 【Android】 ListView中getView的原理与解决多轮重复调用的方法
- 【Android】ListView中getView的原理与解决多轮重复调用的方法
- [转]android listview 连续调用 getview问题分析及解决
- android listview 连续调用 getview问题分析及解决
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- Android ListView滑动过程中图片显示重复错位闪烁问题解决
- Android ListView滑动过程中图片显示重复错位闪烁问题解决
- listView重复调用getView的问题
- android listview 连续调用 getview问题分析及解决。