我有一個Android應用程序的問題,到目前爲止我還沒有能夠拿出一個解決方案。有可能是我錯過了一些明顯的東西,所以也許有人可以爲我提出一個很好的解決方案。雙GridView同步和同步滾動
所以基本上我有兩個並排的GridViews水平佈局。左邊的GridView是一列,右邊的GridView動態調整列數以適合屏幕。基本上左邊的GridView是一個以編程方式填充的右側GridView的行標題列。我這樣做是因爲我構建的表具有一定數量的行,而不是水平滾動所有列(其數量未知,因爲用戶可以添加更多),我需要它來達到屏幕,然後創建一個空行,然後換行以繼續列。我開始使用一個GridView並在第一列添加標題信息,但我遇到了各種各樣的問題,其中包含極其複雜的代碼,用於確定將自定義適配器中的數據放在哪裏以及適配器中的getCount()確定正在創建包括空白單元的正確數量的單元。
現在我有兩個GridViews,一切正在工作,我希望它如何與滾動分開。我希望兩個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位置應用到另一個網格,我相信實際上會工作,並提供良好的同步滾動結果。
您可以通過'smoothScrollBy()'和'getScrollY()'的某種組合來完成此操作,並且每次獲得onScroll回調時都會跟蹤y自動滾動。老實說,我認爲用一個GridView做這件事會更好。您可以嘗試擴展GridView,並在顯示左列的網格頂部顯示一個視圖(網格仍然具有第一列,但如果水平滾動,疊加層將使其看起來像左列不會移動) – Karakuri