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

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

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

4b9b3361

Ответ 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);