我在一个 android 应用程序中遇到了一个问题,到目前为止我还没有找到解决方案。我可能缺少一些明显的东西,所以也许有人可以为我提出一个好的解决方案。
所以基本上我在水平布局中有两个并排的 GridView。左侧 GridView 为一列,右侧 GridView 动态调整列数以适应屏幕。基本上,左边的 GridView 是右边 GridView 的一个以编程方式填充的行标题列。我这样做是因为我正在构建一个具有一定行数的表,而不是水平滚动所有列(由于用户可以添加更多列,所以列的数量未知)我需要它到达边缘屏幕,然后创建一个空白行,然后换行以继续列。
现在我有了两个 GridView,一切都按照我希望它与滚动不同的方式工作。我希望两个 GridView 在滚动时一起滚动(或尽可能接近同时滚动)。这是我的滚动代码,它没有按预期工作:
mRightGrid.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mLeftGrid.smoothScrollToPosition((firstVisibleItem / mRightGridColumns) + 1);
}
});
mLeftGrid.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mLeftGrid.smoothScrollToPosition((firstVisibleItem * mRightGridColumns) + 1);
}
});
希望很明显,这样做的目的是如果右侧网格中有 10 列并且该网格被滚动以便位置 30(第三行的第一个单元格)是第一个可见项,那么左侧网格应该滚动到位置2 (30 / 10 - 1 = 2) 这是左侧网格视图第三行的单元格。所以这根本不像我预期的那样工作,我想知道是否真的有一种方法可以在每次移动网格时评估滚动的实际 y 位置,并将相同的 y 位置应用于我相信的另一个网格实际上会起作用并提供良好的同步滚动结果。