2

短版裏:NestedScrolling一個Viewpager內BottomSheetDialog

如何設置一個NestedScrollingParentNestedScrollingChild與這些孩子的倍數。

龍版

我實現了一個BottomSheetDialogFragment其佈局由ViewPager,而這viewpager的適配器包含RecyclerView。現在

,問題是,因爲在這個時候bottomsheet的協調佈局只支持一個直接NestedScrollingChild一個NestedScrollingParent,只有適配器的第一個片段可以是巢滾動。

我的意思是,只要在viewpager上調用setAdapter,第一項支持嵌套滾動。但是當我改變頁面後,新頁面現在不滾動。然後當我回到上一頁時,它仍然支持滾動。

此外,我注意到如果可以滾動的片段或頁面被銷燬,後續頁面現在可以滾動,這意味着後一頁成爲底部頁面的滾動子頁面。問題是,現在獲得滾動功能的頁面不是當前項目,而是前一項目(我的適配器必須保留3個片段)。

總結:

setAdapter

  • 片段0可以滾動
  • 然後改變頁後片段1,片段1不能滾動
  • 但切換到片段2,然後轉到回到片段1允許片段1滾動(因爲片段0被破壞,我猜)

回答

0

在深入瞭解源代碼之後,我發現問題出在找到底部表格NestedScrollingChild時使用的錯誤算法(Google的人沒有考慮底部表單中ViewPager的可能性)。

見這裏的方法:​​

一下這個方法所做的就是將返回它遇到的第一個NestedScrollingChild在給定的視圖(bottomsheet在這種情況下),這在viewpager與3頁的情況下,在當前頁面之前的那個。此外,該方法在底部包裝的包裝的兒童的佈置階段期間觸發。

考慮到這一點,人們可以設計出許多解決方案,包括行爲本身的子類。

此外,可以通過添加和刪除該子項的一個實例(從舊頁面中刪除,然後添加到當前頁面)來限制viewpager中的NestedScrollingChild,這正是我所做的。您可以在適配器的setPrimaryItemOnPageChangeListener內執行此操作。請務必在底部表格的協調器佈局上致電requestLayout。 (這種解決方案取決於尋呼機適配器佈局/結構的種類,所以我不會發布我的確切解決方案)。

0

我也遇到了這個問題,試圖在BottomSheetDialog中的幾乎每個頁面中使用ViewPager滾動視圖。 我發現laengger製作的這個解決方案([https://github.com/laenger/ViewPagerBottomSheet][1])),並採用它,所以它適合BottomSheetDialog。 希望它可以幫助一些人,遇到同樣的問題:)