6

爲了複製這個問題,我克隆了一個existing project並添加了兩個片段。所以現在有ActivityViewPager有2個片段。每個Fragment有一個RecyclerView(垂直),其中包含RecyclerView(水平)的多個項目。Autoscroll isuue當水平RecyclerView作爲一個項目放置在垂直RecyclerView中

現在的問題是垂直RecyclerView上時中點水平RecyclerView放置在頂部切換標籤的自動滾動。

例如:

  1. 頁1被滾動到該位置

(注意,第一個H-回收站視圖被設置爲只有一半可見)

  1. 然後在第2頁輕觸tablayout轉到頁2

  2. 現在對tablayout PAGE 1再次點擊到回到第1。這裏的預期滾動位置是我們前面離開,但它自動滾動到最高的位置。這樣

(第一RecyclerView充滿可見的,而不是一半。)


我得到了一些線索,同時找出解決方案。

  • 此問題發生在v24.1.1和v24.2.1庫(最新的編寫時)的庫中,但是當它降級到v23.4.0時,它按預期工作。所以很顯然,在庫中導致這種行爲的東西被修改了。
  • 遇到與包含webview的項目相同的問題。 webView和H-recyclerView之間的共同點是它們都可以在內部水平滾動。問題可能與滾動事件的消耗有關。
+0

你打電話給pageVisible事件什麼的? – Jai

+0

否...用戶可見提示更改時不調用任何內容。 – HBB20

回答

0

ViewPagerFragment正在切換時,您可以保存滾動狀態。讓我們在你的Activity一個static變量,它的滾動狀態現在從您的Fragment存儲這樣

public static int scrollPositionIndex; 
public static int scrollPositionOffset; 

,覆蓋setUserVisibleHint功能。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    // Make sure that we are currently visible 
    if (this.isVisible()) { 
     // If we are becoming invisible, then... 
     if (!isVisibleToUser) { 

      // Save scroll state 
      LinearLayoutManager layoutManager = ((LinearLayoutManager) mRecyclerView.getLayoutManager()); 
      YourActivity.scrollPositionIndex = layoutManager.findFirstVisibleItemPosition(); 

      View v = mRecyclerView.getChildAt(0); 
      YourActivity.scrollPositionOffset = (v == null) ? 0 : (v.getTop() - mRecyclerView.getPaddingTop()); 

     } else { 
      // Scroll to the saved position 
      mLayoutManager.scrollToPositionWithOffset(YourActivity.scrollPositionIndex, 
        YourActivity.scrollPositionOffset); 

      // Reset the value 
      YourActivity.scrollPositionIndex = 0; 
      YourActivity.scrollPositionOffset = 0; 
     } 
    } 
} 
+0

感謝您的回覆。我試過你的解決方案,但仍然表現相同...它自動滾動.. – HBB20

+0

你在這裏面臨的問題是什麼? 'setUserVisibleHint'被調用與否?可以保存滾動的位置? –

+0

setUserVisibleHint被調用,但隨後它會滾動到頂部...... – HBB20

相關問題