RecyclerView smoothScrollToPosition, возвращающий неправильную позицию - PullRequest
0 голосов
/ 11 июня 2019

В моем ресивере, я хочу прокрутить по позиции с анимацией. Я написал собственный LinearLayoutManager.

Вот мой код

public class CustomLayoutManager extends LinearLayoutManager {
    private static final float MILLISECONDS_PER_INCH = 200f;
    private Context mContext;

    public CustomLayoutManager(Context context) {
        super(context);
        mContext = context;
    }

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

        LinearSmoothScroller smoothScroller =
            new LinearSmoothScroller(mContext) {
                @Override
                public PointF computeScrollVectorForPosition
                (int targetPosition) {
                    return CustomLayoutManager.this
                            .computeScrollVectorForPosition(targetPosition);
                }
                @Override
                protected float calculateSpeedPerPixel
                (DisplayMetrics displayMetrics) {
                    return MILLISECONDS_PER_INCH/displayMetrics.densityDpi;
                }
            };

        smoothScroller.setTargetPosition(position);
        startSmoothScroll(smoothScroller);
    }
}

Я использую этот класс вот так.

leaderBoardAdapter = new SPGamificationLeaderBoardAdapter(response.list, getContext());
    leaderBoardRecyclerView.setAdapter(leaderBoardAdapter);
    CustomLayoutManager layoutManager = new CustomLayoutManager(getContext());
    leaderBoardRecyclerView.setLayoutManager(layoutManager);
    leaderBoardRecyclerView.post(() -> {
        leaderBoardRecyclerView.setHasFixedSize(true);
        leaderBoardRecyclerView.setNestedScrollingEnabled(false);
        leaderBoardRecyclerView.smoothScrollToPosition(10);


    });

Анимация работает отлично, но smoothScrollToPosition возвращает неправильную позицию. Может кто-нибудь объяснить мне, что не так с моим кодом? Спасибо

1 Ответ

0 голосов
/ 11 июня 2019

Заменить эту строку

return CustomLayoutManager.this.computeScrollVectorForPosition(targetPosition);

К

return CustomLayoutManager.this.computeScrollVectorForPosition(position);

...