我在Android应用程序中遇到一个问题,到目前为止我还没有能够找到解决方案。可能有一些我不知道的事情,所以也许有人可以为我提出一个好的解决方案。
所以基本上我在水平布局中有两个并排的GridViews。左侧GridView是一列,右侧GridView动态调整列数以适应屏幕。基本上左侧GridView是一个以编程方式填充的右侧GridView的行标题列。我这样做是因为我正在构建一个具有设定行数但不是水平滚动所有列的表(由于用户可以添加更多,因此数量未知)我需要它到达边缘在屏幕上然后创建一个空行然后换行以继续列。我开始使用一个GridView并在第一列添加标题信息,但我遇到了各种各样的问题,包括极其复杂的代码,用于确定将哪些数据放入我的自定义适配器以及我的适配器中的getCount()确保正在创建正确数量的细胞,包括空白细胞。
现在我有两个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位置应用到我相信的另一个网格实际上会工作并提供良好的同步滚动结果。
答案 0 :(得分:1)
所以我最终咬了一口子弹并回到一个网格视图并在复杂的代码中进行战斗,因为无论我在滚动时尝试了什么,总是有一个滞后,其他网格赶上了,我就是找不到一种平滑地同时滚动两个网格视图的方法。