我正在创建一个带有许多子视图(例如按钮)的滚动面板。每个子视图都有一个基于其行和列索引的固定位置。我不能在一开始就创建它们,因为它们有很多而且我会用完内存,所以我只想在它与屏幕视图端口相交时添加一个子视图(当用户滚动到该区域时)。我用这样的东西覆盖了 onLayout() 方法:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
for (int row = 0; row < ROW_NUM; row++) {
ColumnAdapter columnAdapter = mRowAdapter.getItem(row);
for (int col = 0; col < COLUMN_NUM; col++) {
ItemView itemView = columnAdapter.getView(col, null, this);
if (isOnScreen(row, col)) {
itemView.layout(col * 100, row * 100, (col + 1) * 100, (row + 1) * 100);
addViewInLayout(itemView, row + col, null, true);
}
}
}
scrollTo(getScrollX(), getScrollY());
}
(ColumnAdapter 是适配器扩展,ItemView 是按钮扩展)。这不起作用,因为在滚动期间未调用 onLayout()。当用户滚动时,我应该怎么做才能动态添加 ItemViews?