NestedScrollView
親のスクロールイベントもトリガーして、プログラムでaの先頭までスクロールする方法はありますか?smoothScrollTo(x, y)
スクロールイベントをに委任しませんNestedScrollingParent
。
NestedScrollView
親のスクロールイベントもトリガーして、プログラムでaの先頭までスクロールする方法はありますか?smoothScrollTo(x, y)
スクロールイベントをに委任しませんNestedScrollingParent
。
回答:
NestedScrollView.scrollTo(0, 0);
NestedScrollView.scrollTo(0, 0);
の一番上までスクロールするために使用するように言っていますNestedScrollView
。どういたしまして。
私はなんとかそれをすることができました(アニメーションスクロール):
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方向の速度です。
behavior.onNestedFling(coordinator, appbar, null, 0, -params.height, true);
、逆にすることができますbehavior.onNestedFling(coordinator, appbar, null, 0, params.height, true);
NestedScrollView
上下にスムーズにスクロールするもう1つの方法は、fullScroll(direct)
関数を使用することです。
nestedScrollView.fullScroll(View.FOCUS_DOWN);
nestedScrollView.fullScroll(View.FOCUS_UP);
NestedScrollView
、アプリバーの下にレイアウトしましたか?
何もうまくいきませんでした。なぜこれがうまくいったのかはよくわかりませんが、ここに私の解決策と問題があります。
ネストされたスクロールビューにリサイクラービューを追加すると、そのアクティビティに到達したときに画面にリサイクラービューが表示されました。一番上までスクロールするには、これを使用する必要がありました。
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);
scrollView.getParent().requestChildFocus(scrollView, scrollView);
私も同様のシナリオに直面しました。私の場合、下にスクロールして最後までスクロールすると、FABボタンが表示され、ユーザーがそのFABボタンをタップするとページの上部に移動します。そのために@SilentKnightの回答を追加しましNestedScrollView.scrollTo(0, 0);
た。一番上に移動しますが、上にスクロールするためのスムーズなアニメーションには不十分です。
スムーズなアニメーションのために、@ Sharjの回答を使用しましたがNestedScrollView.fullScroll(View.FOCUS_UP);
、AppBarが表示されないため、次のようにAppBarを展開する必要がありますappBarLayout1.setExpanded(true)
。したがって、これら3つを使用すると、ページの先頭にスムーズに移動できます。
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
appBarLayout1.setExpanded(true);
NestedScrollViewレベルでのスクロールを簡単に偽造することができます。基本的に、ツールバーの高さだけスクロールしたことをcoordinatorLayoutに伝えます。
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());
スムーズなスクロールに使用できます。
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.smoothScrollTo(0,0);
または通常のスクロールの場合
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
RecyclerViewよりもNestedScrollViewを使用したときに問題が発生しました。このコードは私のために働きました: 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);
RecyclerViewがNestedScrollView内にあるときにRecyclerViewのアイテムにスクロールする方法は次のとおりです
まず、取得してから、目的の場所item height
までスクロールしposition
ます。
val itemHeight =
binding.calendarRecyclerView.findViewHolderForAdapterPosition(0)!!.itemView.height
binding.nestedScrollView2.smoothScrollTo(0, position * itemHeight)