前言
最近遇到一个bug,写了一个简单的listview,不过listview的条目内含的控件较多(且控件的状态即显隐状态也比较复杂),结果就导致了,一个bug,例如我的item只有3个,但是getView居然被调用了几十次。实在是惊人的很。这也间接导致条目的显示/隐藏状态出现了混乱。
解决办法
问题的发现过程
由于上述listv条目中控件的显隐状态出现混乱,当时很纳闷,但是debug后发现getView的调用次数不合乎常理。虽然不知道显隐状态出现错乱于getView被多次调用是否有关系,但是依然百度了一下:“adapter多次调用getView”,之后发现遇到这个问题的不在少数。(notify正常,初始化出现错乱)
产生多次调用的根源
之所以多次调用getView原因就是自己在写布局时listview(使用了listview)的大小不固定,而添加adapter后,listview的条目尺寸不确定,这就导致了listview需要不断的测量。
解决方法
解决方法,就是listview的大小要确定,例如使用match_parent。
方法一:
在listview外面套一层RelativeLayout,将listview高度设置为match_parent。
方法二:
在listview外面套一层 LinearLayout,将listview高度设置为0dip。
weight设为1。