解决ListView/GridView重复getView浪费资源问题

来源:互联网 发布:centos回到根目录 编辑:程序博客网 时间:2024/06/14 10:34

以GridView作为示例。

先说原因:GirdView在绘制布局前会绘制一个Item去探测高度,因此导致循环调用Adapter的getView方法。

网上解决:之前看到有人说把GridView的高度设为MATCH_PARENT或者固定高度即可,经过测试发现没有效果。

解决方式:

  1. 重写GirdView
    @TargetApi(Build.VERSION_CODES.L)public class UIGridView extends GridView {private boolean measure = false;public UIGridView(Context context) {super(context);}public UIGridView(Context context, AttributeSet attrs) {super(context, attrs);}public UIGridView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public UIGridView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {measure = true;super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {measure = false;super.onLayout(changed, l, t, r, b);}public boolean isMeasure() {return measure;}public void setMeasure(boolean measure) {this.measure = measure;}}

  2. 利用添加的绘图开关变量进行优化
    @Overridepublic View getView(int position, View convertView, ViewGroup parent) {<span style="white-space:pre"></span>//判断GirdView状态,如果处于Measure直接返回convertView,不进行数据处理if (photoGridView.isMeasure() && convertView != null) {return convertView;}

0 0
原创粉丝点击