2013-08-02 55 views
1

我有一個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位置應用到另一個網格,我相信實際上會工作,並提供良好的同步滾動結果。

+0

您可以通過'smoothScrollBy()'和'getScrollY()'的某種組合來完成此操作,並且每次獲得onScroll回調時都會跟蹤y自動滾動。老實說,我認爲用一個GridView做這件事會更好。您可以嘗試擴展GridView,並在顯示左列的網格頂部顯示一個視圖(網格仍然具有第一列,但如果水平滾動,疊加層將使其看起來像左列不會移動) – Karakuri

回答

1

所以我最終咬咬牙,要回一個網格視圖,並通過複雜的代碼,因爲作戰不管什麼,我試着用滾動總有一個滯後的其它網格之前抓住了,我都看不出來找到一種同時平滑滾動兩個網格視圖的方法。