![](/img/trans.png)
[英]android when recyclerview in a viewpager is scrolled, how to top parent scrollview scroll
[英]Scroll ViewPager's RecyclerView when page gets scrolled
我有一個ViewPager,其中有幾個RecyclerViews作為頁面。 我想實現以下功能:用戶開始滾動頁面后,其他頁面上的RecyclerViews移動一定量。
@Override
public void onPageScrolled(int position, float offset, int offsetPx) {
RecyclerView view1 = getPage(position - 1);
RecyclerView view2 = getPage(position + 1);
if(scrollNeeded()) {
view1.scrollBy(0, 200);
view2.scrollBy(0, 200);
}
}
我的問題是,如果我在ViewPager中緩慢滾動,一切都會正常,但是如果我快速滾動,某些RecyclerView不會滾動。 我想我需要以某種方式同步此方法。
任何想法如何解決這個問題? 用戶不應看到該滾動。
ViewPager
保持+1頁的左右預加載。 意思是
當用戶真正快速瀏覽頁面時,確實存在頁面(您的RecyclerView
實例及其適配器)仍在准備中的情況,因此他們錯過了scrollBy()
調用。
您可以用不同的方法解決此問題。
最簡單的方法是通過調用viewPager.setOffscreenPageLimit(3)
-以獲得更多ViewPager.setOffScreenPageLimit(int)來增加屏幕外緩存頁面的數量(例如3 ) 。 如果您每次用戶滑動時都依靠頁面刷新,則可能是一個問題。
另一個選擇是為您的RecyclerView
頁面創建一個自定義視圖,並添加一個滾動值以從外部進行設置,例如
// in your custom page view private RecyclerView.Adapter adapter; private boolean needToScroll; public void setNeedToScroll(boolean needToScroll) { this.needToScroll = needToScroll; // if adapter is not null (ie already set), scroll as is // and set the value to false if (adapter != null) { this.needToScroll = false; scrollBy(0, 200); } } // and then in the place where you define your adapter, but after setting it if (needToScroll) { needToScroll = false; scrollBy(0, 200); }
最后,您的視圖分頁器滾動偵聽器
@Override public void onPageScrolled(int position, float offset, int offsetPx) { if(scrollNeeded()) { Page view1 = getPage(position - 1); Page view2 = getPage(position + 1); view1.needToScroll(true); view2.needToScroll(true); } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.