親のスクロールイベントもトリガーすることで、プログラムでNestedScrollView
の一番上までスクロールする方法はありますか? smoothScrollTo(x, y)
は、スクロールイベントをNestedScrollingParent
に委任しません。
私はそれをなんとかしました(アニメーションスクロール):
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方向の速度です。
NestedScrollView.scrollTo(0, 0);
スクロールNestedScrollView
を上下にスムーズにする別の方法は、fullScroll(direct)
関数を使用することです
nestedScrollView.fullScroll(View.FOCUS_DOWN);
nestedScrollView.fullScroll(View.FOCUS_UP);
何もうまくいかず、なぜこれがうまくいったのか本当に分かりませんが、ここに私の解決策と問題があります。
ネストされたスクロールビューにリサイクラビューを追加すると、そのアクティビティに到達すると画面上にリサイクラビューが表示されました。一番上までスクロールするには、これを使用する必要がありました。
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);
私も同様のシナリオに直面しました。私の場合、最後までスクロールするとFABボタンが表示され、ユーザーがそのFABボタンをタップするとページの上部に移動します。そのために、@ SilentKnight answer NestedScrollView.scrollTo(0, 0);
を追加しました。トップに移動しますが、上にスクロールするためのスムーズなアニメーションには不十分です。
スムーズなアニメーションのために、NestedScrollView.fullScroll(View.FOCUS_UP);
である@Sharjの回答を使用しましたが、AppBarが表示されないため、appBarLayout1.setExpanded(true)
に従ってAppBarを拡張する必要があります。これら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);
上記のすべての応答を試しましたが、nothinは機能しているように見えましたが、postDelayedだけが必要でした。
scrollview.postDelayed(new Runnable() {
@Override
public void run() {
listener.setAppBarExpanded(false, true); //appbar.setExpanded(expanded, animated);
scrollview.fullScroll(View.FOCUS_DOWN);
}
}, 400);
行を2回追加します。
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.fullScroll(View.FOCUS_UP);
代わりにView.scollTo(int x、int y)を使用して、上部にスクロールします。
findViewById({your NestedScrollView resource id}).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);