关于listview的自定义adapter不执行getview()方法的几种情况和解决办法

        listview是一个比较常用的控件,为了适应自己需要的效果往往会继承baseadapter去实现自定义的适配器。

       在该适配器中出错最多的应该是getview()了。

       从接触listview控件开始,第一个报的错就是关于getview()的。昨天有人问了我一个同样是不执行getview()的问题,所以我觉得有必要去写一篇博文记录一下。算是自己学习总结了。

       第一、没有执行getview往往是因为没有显示页面。

                  这个时候,我们首先要保证确实有有效的数据传到了自定义的适配器里。因为如果getcount()的返回值是0的话,getview是不会被执行的。

       第二、要确认adapter在核实的时间和位置去实例化,比如说在异步任务的onPostExecute()方法中去实例化adapter的话,甚至会导致该方法也不会被执行到,当然getview更执行不到了。

   第三、布局的问题。在xml文件中,有些属性会极大的影响到getview的执行。他执行的前提是,他有空间去展示。

        当你将listview设置为gone的时候,他是不会去执行这个方法的。在适配数据前将他改为可见就好了。

        另外一个就是昨天晚上朋友遇到的那个问题。将父布局设置成android:layout_height="wrap_content",因为页面的测量是在oncreate的时候被测量的。而此时里面是没有内容的,也就是高度为0,在数据加载好之后,父布局并没有重新测量,而只是listview重新测量了,但是因为listview此时的高度是0,所以getview()还是无法被执行到。将android:layout_height="wrap_content"改成android:layout_height="match_parent"就好了

    这个是我遇到的一些问题和解决方案。有什么问题的话,请各位大神指导。

       

你可能感兴趣的:(Android)