这两条折腾listview+popuwindow显示。
首先遇到listview显示不正常(宽度总是为matchparent)。
为此在这里写上适应PopupWindow和ScrollView的方法——重写listvie的onMeasure方法,如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int maxWidth = meathureWidthByChilds() + getPaddingLeft() + getPaddingRight();
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY), expandSpec);
}
private int meathureWidthByChilds() {
int maxWidth = 0;
View view = null;
for (int i = 0; i < getAdapter().getCount(); i++) {
view = getAdapter().getView(i, view, this);
view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
if (view.getMeasuredWidth() > maxWidth){
maxWidth = view.getMeasuredWidth();
}
}
return maxWidth;
}
其实就是为listview重新计算合适的宽和高。
另外还遇到了listview在删除到item为0后,增加item后getCount个getChildCount一直为0的情况。
纠结了很长时间。最后发现http://blog.sina.com.cn/s/blog_682dcc0d010180q2.html。
调用listview的requestLayout(),这样做无非就是拟补数据数量不一致导致报错
这一句解决了我的问题。