0

RecyclerViewでNexus 6P APIのSwipeRefreshLayoutを不整合にアクティブにする問題が発生しました。 私たちは、サポートライブラリの最新のバージョンである:SwipeRefreshLayoutが機能しなくなりました/ RecyclerViewが矛盾してSwipeRefreshLayoutをトリガーしました

compile 'com.android.support:recyclerview-v7:25.3.1' 
compile 'com.android.support:appcompat-v7:25.3.1' 
compile 'com.android.support:design:25.3.1' 
compile 'com.android.support:support-v4:25.3.1' 

私は(上に項目を追加)リフレッシュするプルが発生した場合の前に追加されますデータセットとRecyclerViewを持って、それが私のレイアウトで宣言されていますこのように:

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipeRefresh" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 
     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recyclerView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" /> 
</android.support.v4.widget.SwipeRefreshLayout> 

私はRecyclerViewに項目を追加、ジェスチャーに約2~3回をトリガすることができるよませんが、それはもはや私はプル更新をトリガすることができます。 SwipeRefreshLayout.setEnabled(false)を決して呼び出しません。 RecyclerViewは、アイテムリストの一番上にあっても、canScrollVertically(-1)に内部的に応答しているようです。

LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
llm.setStackFromEnd(true); // Start with most recent messages (enables scroll-to-bottom) 
recyclerView.setLayoutManager(llm); 

答えて

0

Viewで、canScrollVertically(-1)を計算コードは、computeVerticalScrollRangecomputeVerticalScrollOffsetの結果に依存します:

当社取扱いに関する唯一興味深いのは、私たちは私たちがスクロールから下せるRecyclerViewのレイアウトマネージャを上書きしていますおよびcomputeVerticalScrollExtent

RecyclerViewは、これらの計算を行うためにLinearLayoutManagerに依存しています。空のスクロールバーを表示するためにsmoothScrollbarEnabledtrue(デフォルト)の場合、これは近似を行うScrollbarHelperに転送されます。

RecyclerViewのアイテムのサイズが異なる場合、これらの概算は完全に間違っています。

LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
llm.setSmoothScrollbarEnabled(false); 
recyclerView.setLayoutManager(llm); 

は、私たちの問題を解決し、確実に私たちは、リストの一番上になったたびにトリガするSwipeRefreshLayoutを得ました。

関連する問題