在使用Listview 、GridView的过程中会发现 adapter的getView方法中会创建好多次position=0的控件,这是为什么呢,下面让我们从源码部分分析一下:
GridView 和Listview都是继承AbListview的,那么我们来看看Ablistview
其中
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // Sets up mListPadding super.onMeasure(widthMeasureSpec, heightMeasureSpec); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); if (widthMode == MeasureSpec.UNSPECIFIED) { if (mColumnWidth > 0) { widthSize = mColumnWidth + mListPadding.left + mListPadding.right; } else { widthSize = mListPadding.left + mListPadding.right; } widthSize += getVerticalScrollbarWidth(); } int childWidth = widthSize - mListPadding.left - mListPadding.right; boolean didNotInitiallyFit = determineColumns(childWidth); int childHeight = 0

在Android开发中,ListView和GridView在使用时经常出现adapter的getView方法重复创建position=0的视图问题。这个问题源于AbListView的源码,通过分析AbListView的recycleBin和obtainView方法可以发现其回收机制导致的。为解决此问题,可以考虑自定义一个不继承AbListView的ListView,改为继承LinearLayout,并保持adapter不变,以此避免此类问题。
最低0.47元/天 解锁文章
6072

被折叠的 条评论
为什么被折叠?



