问题现状: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_parent"
android:layout_margin="10dp"
android:dividerHeight="5px"
android:listSelector="@android:color/transparent" >
</ListView>

一下是原作者的解释:(转自: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设计的时候,才能很好的去结合!

更多相关文章

  1. 四大布局
  2. android开发4:Android布局管理器1(线性布局,相对布局RelativeLayou
  3. RelativeLayout(相对布局)
  4. Android基础————UI布局之高级控件详解
  5. Android常用控件—TextView及其子类Button、EditText等
  6. 自定义Android 标题栏TitleBar布局
  7. android ImageView 控件
  8. Android开发中XML布局的常用属性说明
  9. Android控件开发之TextView

随机推荐

  1. 也谈Android的学习和利用Android来赚钱
  2. android平板上的GridView视图缓存优化
  3. 【Android】Android(安卓)4.0 无法接收开
  4. Android各种资源详解
  5. 详解 Android(安卓)的 Activity 组件
  6. Android(安卓)自己动手写ListView学习其
  7. Android中文合集(5)(126+8篇)(chm格式)
  8. 用Android(安卓)NDK r6编译boost 1.47
  9. 从Android界面开发谈起
  10. Android的5层平台架构