我在片段中使用expandable height GridView
。它是默认的GridView,具有重写的onMeasure
方法。这允许在GridView
内部ScrollView
使用此GridView包装片段。
boolean expanded = false;
public boolean isExpanded() {
return expanded;
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (isExpanded()) {
// Calculate entire height by providing a very large height hint.
// View.MEASURED_SIZE_MASK represents the largest height possible.
int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
但我在检查屏幕上显示GridView
的哪些项目时遇到问题。所有可以帮助我不使用被覆盖的onMeasure
的方法,因为GridView
创建时一次显示所有项目。
getScrollY() - 总是返回0,因为GridView已经通过覆盖onMeasure进行了扩展,并且不会滚动。
onScrollListener's
参数只是从0到最后一项的一系列可见子视图,因为所有这些参数都显示(通过onMeasure),而不是实际的滚动位置。