前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

RecyclerViewにオートスクロール機能をつける

課題

RecyclerViewでもオートスクロールを実現したい

対策

RecyclerView#addOnScrollListenerとLinearLayoutManager#findLastVisibleItemPositionを組み合わせる。

LinearLayoutManagerにはfindLastVisibleItemPositionという一部が見えている最後のアイテム位置を教えてくれるメソッドが存在する。これがアイテム数と一致した時点で最後にきたことが分かる。
位置情報は配列番号なのでアイテム数と一致させるには一方に1を足すなり引くなりする必要がある。

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                if (mIsLoading || !mHasNext) {
                    return;
                }

                LinearLayoutManager manager = (LinearLayoutManager)recyclerView.getLayoutManager();
                int lastItemPosition = manager.findLastVisibleItemPosition();
                if (lastItemPosition >= manager.getItemCount() -1) {
                    mIsLoading = true;
                    
                    //TODO 
                    //追加のリクエスト
                }
            }

            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                //do nothing
            }
        });