java - 在到达底部后自动滚动到回收器 View 顶部的最佳方法是什么?

标签 java android android-adapter android-recyclerview

我正在创建一个显示卡片回收 View 的 Android 应用程序。我已经实现了自动滚动功能作为我的线性布局管理器的一部分,它将平滑滚动到回收器 View 中的最后一个元素。

一旦检测到最后一个元素可见,我希望列表快速返回到回收器 View 的顶部。

这是我的自定义布局管理器的代码。

public class ScrollLayoutManager extends LinearLayoutManager {

    private static final float MILLISECONDS_PER_INCH = 10000f; //default is 25f (bigger = slower)

    public ScrollLayoutManager(Context context) {
        super(context);
    }

    public ScrollLayoutManager(Context context, int orientation, boolean reverseLayout) {
        super(context, orientation, reverseLayout);
    }

    public ScrollLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {

        final LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) {

            @Override
            public PointF computeScrollVectorForPosition(int targetPosition) {
                return super.computeScrollVectorForPosition(targetPosition);
            }

            @Override
            protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
            }
        };
        linearSmoothScroller.setTargetPosition(position);
        startSmoothScroll(linearSmoothScroller);
    }
}

最佳答案

您可能需要将 RecyclerView.OnScrollListener ( docs ) 附加到您的 RecyclerView 并覆盖 onScrolled() 并使用 findLastCompletelyVisibleItemPosition () ( docs ) 或 findLastVisibleItemPosition() ( docs ),根据您的需要,结合 getItemCount() ( docs ) 检查您是否命中最后一项,然后滚动回顶部。

关于java - 在到达底部后自动滚动到回收器 View 顶部的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890187/

相关文章:

java/lang/NoClassDefFoundError : java/lang/invoke/MethodHandle eclipse juno 错误

java - MongoDB Java 使用多个过滤器并获得最后一个

android - 当软键盘消失时,WebView(内部带有 iframe)不会调整大小

java - 自定义 ArrayAdapter 中无法访问的语句

android - 从listview android中删除了错误的行

android - 我的自定义适配器 (android) 怎么了?

java - 为什么 EnumMap 不是 Java 中的 SortedMap?

java - 合并两个 .m4a 文件或将 .wav 文件转换为 m4a

android - 如何在后台运行计时器?

java - 测试 bundle 中是否存在某个值的更好方法?