2016-09-07 63 views
0

NestedScrollView位於RecyclerView中。當這個RecyclerView實例化一個addOnScrollListener時,監聽器可以正常工作,但是我不能做分頁,也不能正確地跟蹤屏幕上的RecyclerView項目。當RecyclerView不是NestedScrollView,一切正常NestedScrollView中的RecyclerView.addOnScrollListener

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:orientation="vertical" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="100dp" /> 
     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/>   
    </LinearLayout> 
</android.support.v4.widget.NestedScrollView> 
+0

澄清的措辭;修復語法。 – Prune

回答

2

我認爲這是關係到this post

你應該嘗試添加一個OnScrollChangeListener到你的NestedScrollView。

public abstract class OnDemandRecyclerViewScrollListener implements NestedScrollView.OnScrollChangeListener { 
    private final RecyclerView recyclerView; 

    private int previousRecyclerViewHeight; 
    private boolean loading = true; 
    private int page = 1; 

    private boolean enabled = true; 
    @Dimension(unit = Dimension.PX) 
    private int visibleThreshold = 0; 

    public OnDemandRecyclerViewScrollListener(RecyclerView recyclerView) { 
    this.recyclerView = recyclerView; 
    loadNextPage(page); 
    } 


    @Override 
    public void onScrollChange(NestedScrollView nestedScrollView, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 
    if (previousRecyclerViewHeight < recyclerView.getMeasuredHeight()) { 
     loading = false; 
     page++; 
     previousRecyclerViewHeight = recyclerView.getMeasuredHeight(); 
    } 

    if ((scrollY + visibleThreshold >= (recyclerView.getMeasuredHeight() - nestedScrollView.getMeasuredHeight())) && 
     scrollY > oldScrollY && !loading && enabled) { 
     loading = true; 
     loadNextPage(page); 
    } 
    } 

    protected abstract void loadNextPage(int page); 
} 
+0

爲什麼'recyclerView.getMeasuredHeight() - nestedScrollView.getMeasuredHeight()'而不是'linearLayout.getMeasuredHeight() - nestedScrollView.getMeasuredHeight()'? – BornToCode

相關問題