EndlessRecyclerView
の最後にNestedScrollView
があります。 EndlessRecyclerView
は、ユーザーがrecyclerViewの一番下までスクロールすると、さらにデータを読み込むことを意味します。これはすでに実装されており、他の場所で機能していますが、recyclerViewをNestedScrollView
内に配置すると、OnScrollListener
イベントは発生しません。
XMLデザイン:
<NestedScrollView>
<Other views/>
<EndlessRecyclerView/>
</NestedScrollView >
コード:
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// This is never fired! Here is where I implement the logic of EndlessRecyclerView
}
});
上記の場合のスクロールイベントを取得するにはどうすればよいですか?
スクロール可能な2つのビューを相互に配置するのは良くないことを知っています。しかし、2つのスクロール可能なビューを持たずに上記のケースをどのように持っていますか?
私はすでにこのリンクをたどっていますが、機能しません: scrollview Android内のrecyclerviewのスクロールイベント
NestedScrollViewの下にあるリサイクラビューの無限スクロールを実現するには、「NestedScrollView.OnScrollChangeListener」を使用できます
_nestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
if(v.getChildAt(v.getChildCount() - 1) != null) {
if ((scrollY >= (v.getChildAt(v.getChildCount() - 1).getMeasuredHeight() - v.getMeasuredHeight())) &&
scrollY > oldScrollY) {
//code to fetch more data for endless scrolling
}
}
});
_
ここでv.getChildCount() -1
は、無限スクロールを実装するリサイクラビューを提供します。
また、_scrollY > oldScrollY
_は、ページが下にスクロールされていることを確認します。
私は同様の問題を抱えていましたが、少し異なりました。私の場合、NestedScrollViewがcontent_main xml(アクティビティの一部)にある間に、フラグメント内にrecycleviewがありました。
SwipeRefreshLayoutを使用して、フラグメント内にあるリサイクルビューをラップしました
これは私のフラグメントのコードです:
<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
Android:id="@+id/swipe_dummy"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
Android:id="@+id/top_series_recycle_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
行うべきことは、コードからSwipeRefreshLayoutを無効にすることだけです。
mSwipeLayout.isEnabled = false
そうしない場合、下にスワイプすると、無限の更新アイコンが表示されます。誰かがこの機能を必要とするか、この問題を抱えている場合に備えて、このソリューションを共有したかった
SwipeRefreshLayoutでrecycleviewをラップすると、recycleviewのaddOnScrollListenerが通常どおり呼び出されることがわかります。