- 关于GridView数据出现错乱的问题网友们也给出了很多的解决方案
if (convertView == null) {
holder = new Holder();
convertView.setTag(holder);
}else {
holder = (Holder) convertView.getTag();
}
其中一种就是注释掉adapter中的getView方法中的if else块,也许这样能解决问题(我这里并没有),通常为了提高getView的效率,笔者不建议采用此方法。这里就不依依例举了。
解决方案
重写GridView,这里主要是计算一次最大的高度复写onMeasure方法,避免重复计算,同时禁止了GridView的滑动。
public class NoScrollGridView extends GridView {
public NoScrollGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public NoScrollGridView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public NoScrollGridView(Context context) {
this(context, null);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
当然滑动是必须的,这里是一次加载所有数据,在自定义NoScrollGridView外添加ScrollView代码块。
其次也是相对比较重要的事:你的adapter中的item父布局(最外层布局)一定要采用,
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
这两个属性wrap_content是必须的。
最后终于解决了问题,仅作参考。
- GridView 一次加载所有的数据(缺点)
- 建议使用RecyclerView