Có cách nào để cuộn lên đầu trang theo cách lập trình NestedScrollView
bằng cách cũng kích hoạt các sự kiện cuộn cho phụ huynh không? smoothScrollTo(x, y)
không ủy quyền các sự kiện cuộn cho NestedScrollingParent
.
Có cách nào để cuộn lên đầu trang theo cách lập trình NestedScrollView
bằng cách cũng kích hoạt các sự kiện cuộn cho phụ huynh không? smoothScrollTo(x, y)
không ủy quyền các sự kiện cuộn cho NestedScrollingParent
.
Câu trả lời:
NestedScrollView.scrollTo(0, 0);
NestedScrollView.scrollTo(0, 0);
để cuộn lên đầu NestedScrollView
. Không có gì.
Tôi đã quản lý để làm điều đó (cuộn động):
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);
}
nơi 10000
là vận tốc trong y-hướng.
behavior.onNestedFling(coordinator, appbar, null, 0, -params.height, true);
để đảo ngược nóbehavior.onNestedFling(coordinator, appbar, null, 0, params.height, true);
Một cách khác để cuộn mượt NestedScrollView
mà lên hoặc xuống là sử dụng fullScroll(direct)
hàm
nestedScrollView.fullScroll(View.FOCUS_DOWN);
nestedScrollView.fullScroll(View.FOCUS_UP);
NestedScrollView
bên dưới thanh ứng dụng chưa?
Không có gì hiệu quả với tôi và tôi thực sự không biết tại sao điều này lại hiệu quả, nhưng đây là giải pháp và vấn đề của tôi.
Khi thêm chế độ xem người tái chế vào chế độ xem cuộn lồng nhau, nó sẽ hiển thị chế độ xem người tái chế trên màn hình khi đến hoạt động đó. Để cuộn lên hết cỡ, tôi phải sử dụng cái này:
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);
Tôi cũng phải đối mặt với tình huống tương tự. Trong trường hợp của tôi, khi tôi cuộn xuống để kết thúc, nút FAB sẽ xuất hiện và khi người dùng nhấn vào nút FAB đó sẽ lên đầu trang. Đối với điều đó, tôi đã thêm câu trả lời @SilentKnight NestedScrollView.scrollTo(0, 0);
Cho lên trên cùng nhưng không đủ để có hoạt ảnh mượt mà khi cuộn lên.
Để có hoạt ảnh mượt mà, tôi đã sử dụng câu trả lời @Sharj đó là NestedScrollView.fullScroll(View.FOCUS_UP);
Nhưng sau đó AppBar của tôi không hiển thị ở đó nên tôi phải mở rộng AppBar như sau appBarLayout1.setExpanded(true)
. Vì vậy, sử dụng ba cái này, tôi có thể lên đầu trang một cách suôn sẻ.
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
appBarLayout1.setExpanded(true);
Bạn có thể dễ dàng giả mạo thao tác cuộn ở cấp NestedScrollView. Về cơ bản, bạn nói với điều phối viênLayout rằng bạn vừa cuộn theo chiều cao của thanh công cụ.
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());
Bạn có thể sử dụng điều này để cuộn mượt mà.
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.smoothScrollTo(0,0);
HOẶC cho cuộn bình thường
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
Tôi đã thử tất cả các phản hồi ở trên, dường như không có gì hoạt động nhưng tôi chỉ cần một bài đăng Bị hoãn.
scrollview.postDelayed(new Runnable() {
@Override
public void run() {
listener.setAppBarExpanded(false, true); //appbar.setExpanded(expanded, animated);
scrollview.fullScroll(View.FOCUS_DOWN);
}
}, 400);
Thêm dòng hai lần. Làm việc cho tôi
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.fullScroll(View.FOCUS_UP);
Thay vào đó, hãy sử dụng View.scollTo (int x, int y) để cuộn lên trên cùng.
findViewById({your NestedScrollView resource id}).scrollTo(0, 0);
Tôi đã gặp sự cố với NestedScrollView khi sử dụng hơn là với RecyclerView. Mã này phù hợp với tôi: 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);
Đây là cách tôi cuộn đến một mục của RecyclerView khi RecyclerView ở bên trong NestedScrollView
Đầu tiên, lấy một dấu item height
rồi cuộn đến cái position
mà bạn muốn.
val itemHeight =
binding.calendarRecyclerView.findViewHolderForAdapterPosition(0)!!.itemView.height
binding.nestedScrollView2.smoothScrollTo(0, position * itemHeight)