Программно прокрутите вверх до вершины NestedScrollView

Есть ли способ программно прокручиваться до вершины NestedScrollView, также вызывая события прокрутки для родителя? smoothScrollTo(x, y) не передает событиям прокрутки в NestedScrollingParent.

Ответ 1

Мне это удалось (анимированная прокрутка):

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
    behavior.onNestedFling(coordinatorLayout, appBarLayout, null, 0, 10000, true);
}

где 10000 - скорость в направлении y.

Ответ 2

NestedScrollView.scrollTo(0, 0);

Ответ 3

Еще один способ сглаживания прокрутки NestedScrollView на всем пути вверх или вниз используется функция fullScroll(direct)

nestedScrollView.fullScroll(View.FOCUS_DOWN);
nestedScrollView.fullScroll(View.FOCUS_UP);

Ответ 4

Ничто не работало для меня, и я действительно не знаю, почему это сработало, но вот мое решение и проблема.

При добавлении вида ресайклера в вложенное представление прокрутки он показывал просмотр ресайклеров на экране при достижении этой активности. Чтобы прокрутить весь путь, мне пришлось использовать это:

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.details_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
ProductDescriptionAdapter adapter = new ProductDescriptionAdapter(this);
adapter.setData(mProduct.getDetails());
recyclerView.setAdapter(adapter);
NestedScrollView scrollView = (NestedScrollView) findViewById(R.id.scroll);
scrollView.getParent().requestChildFocus(scrollView, scrollView);

Ответ 5

Я также столкнулся с подобным добрым сценарием. В моем случае, когда я прокручиваю вниз до конца, должна появиться кнопка FAB, а когда пользователь нажимает на эту кнопку FAB, она переходит в верхнюю часть страницы. Для этого я добавил @SilentKnight answer NestedScrollView.scrollTo(0, 0); Для перехода наверх, но этого недостаточно для плавной анимации для прокрутки вверх.
Для плавной анимации я использовал ответ @Sharj, который является NestedScrollView.fullScroll(View.FOCUS_UP); Но тогда мой AppBar там не виден, поэтому мне нужно расширить AppBar следующим образом appBarLayout1.setExpanded(true). Таким образом, используя эти три, я могу плавно перейти в начало страницы.

nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
appBarLayout1.setExpanded(true);

Ответ 6

Вы можете легко подделать прокрутку на уровне NestedScrollView. Вы в основном говорите координаторуLayout, что вы просто прокручивали высоту панели инструментов.

    NestedScrollView nestedScrollView = (NestedScrollView) getActivity().findViewById(R.id.your_nested_scroll_view);

    int toolbarHeight = getActivity().findViewById(R.id.toolbar).getHeight();

    nestedScrollView.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
    nestedScrollView.dispatchNestedPreScroll(0, toolbarHeight, null, null);
    nestedScrollView.dispatchNestedScroll(0, 0, 0, 0, new int[]{0, -toolbarHeight});
    nestedScrollView.scrollTo(0, nestedScrollView.getBottom());

Ответ 7

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

nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.smoothScrollTo(0,0);

ИЛИ для нормальной прокрутки

nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);

Ответ 8

Вместо этого используйте View.scollTo(int x, int y), чтобы перейти к началу.

findViewById({your NestedScrollView resource id}).scrollTo(0, 0);

Ответ 9

Я попробовал все вышеупомянутые ответы, ничто, казалось, не работало, но мне нужно было только postDelayed.

    scrollview.postDelayed(new Runnable() {
        @Override
        public void run() {
            listener.setAppBarExpanded(false, true); //appbar.setExpanded(expanded, animated);
            scrollview.fullScroll(View.FOCUS_DOWN);
        }
    }, 400);

Ответ 10

У меня была проблема с NestedScrollView, когда я использовал, чем с RecyclerView. Этот код работал для меня: nestedScrollView !!. GetParent(). RequestChildFocus (nestedScrollView, nestedScrollView);

    val recyclerViewSearch = activity?.findViewById<RecyclerView>(R.id.recycler)
    recyclerViewSearch.setAdapter(setAdapterSearch())

    val nestedScrollView = activity?.findViewById<NestedScrollView>(R.id.bottom_sheet_Search)
    nestedScrollView!!.getParent().requestChildFocus(nestedScrollView, nestedScrollView);