Подтвердить что ты не робот

Прокрутите вверх страницы в RecyclerView с помощью LinearLayoutManager

У меня есть фрагмент, в котором есть RecyclerView с LinearLayoutManager, в котором есть элементы CardView. Нажатие кнопки плавающего действия, по которой элементы должны прокручиваться вверх. Я попытался использовать scrollToPosition, а также scrollToPositionWithOffset с RecyclerView, а также с LinearLayoutManager, как показано ниже. Но это не имеет никакого эффекта. Почему это так? Кто-нибудь может помочь мне.

И я разместил RecyclerView непосредственно внутри SwipeRefreshView в XML файле. Я звоню setFloatingActionButton, как только установлен адаптер на RecyclerView.

 public void setFloatingActionButton(final View view) {
    float = (android.support.design.widget.FloatingActionButton) getActivity().findViewById(R.id.float);
    float.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    mRecyclerView.smoothScrollToPosition(0);


            android.support.design.widget.Snackbar.make(view, "Scrolled to Top", android.support.design.widget.Snackbar.LENGTH_SHORT)
                    .setAction("Ok", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager();
                            llm.scrollToPosition(0);

                        }
                    })
                    .setActionTextColor(getActivity().getResources().getColor(R.color.coloLink))
                    .show();
        }
    });
}
4b9b3361

Ответ 1

Продолжая вышеприведенные комментарии, в идеале, заменяя

mRecyclerView.smoothScrollToPosition(0);

в onClick кнопки с плавающим действием с

mLayoutManager.scrollToPositionWithOffset(0, 0);

должен работать. Вы также можете удалить код SnackBar, потому что он вам не нужен. Итак, весь ваш метод должен выглядеть как

public void setFloatingActionButton(final View view) {
    float actionButton = (android.support.design.widget.FloatingActionButton) getActivity()
            .findViewById(R.id.float);
    actionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView
                    .getLayoutManager();
            layoutManager.scrollToPositionWithOffset(0, 0);
        }
    });
}

И если вы скажете, что вышеописанное не работает, тогда проверьте, что вызов onClick() даже вызван или нет. Попробуйте добавить в него сообщение журнала и посмотреть, напечатан ли его.

Ответ 2

Использование метода smoothScrollToPosition() работало для меня с новейшей версией Android.

layoutManager.smoothScrollToPosition(mRecyclerView, null, 0);

Ответ 3

Вызвать 'scrollToPosition (0)', используя это:

public void scrollToPosition(final int position) {
    if (mRecyclerView != null) {
        getHandler().post(new Runnable() {
            @Override
            public void run() {
                mRecyclerView.scrollToPosition(position);
                if (position == 0) {
                    LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
                    layoutManager.scrollToPositionWithOffset(0, 0);
                    mScrollView.fullScroll(View.FOCUS_UP);
                }
            }
        });
    }
}

Ответ 4

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

layoutManager.smoothScrollToPosition(mRecyclerView, null, 'last_index') действительно не помогло.

Моя проблема была решена, когда я сделал вид переработчика, чтобы показать ребенка на последней позиции

recyclerView.scrollToPosition(length-1)