2015-12-06 16 views
11

Trước đây, khi tôi muốn di chuyển một ListView đến một vị trí mong muốn, tôi sẽ sử dụngRecylerView cuộn đến vị trí mong muốn mà không cần hoạt hình

listView.setSelection(row); 

Các ListView sẽ được cuộn mà không cần bất kỳ hình ảnh động - Android List View set default position without animation

Bây giờ, Tôi muốn đạt được hiệu quả tương tự trên RecyclerView. Tôi cố gắng thực hiện

((LinearLayoutManager)recyclerView.getLayoutManager()).scrollToPositionWithOffset(row, 0); 

Tuy nhiên, có hoạt ảnh cuộn mà tôi muốn tránh.

Có cách nào tôi có thể thực hiện cuộn theo chương trình, không có hoạt ảnh không?

Đây là phim hoạt hình tôi có nghĩa là - https://youtu.be/OKsUKwBLoks

Lưu ý, tôi đã thử các cách sau đây. Tất cả chúng đều tạo ra hoạt ảnh.

  • scrollToPositionWithOffset
  • smoothScrollToPosition
  • scrollToPosition
+0

Video bạn đã đăng hiển thị hoạt ảnh chèn mục, không có gì liên quan đến hoạt ảnh cuộn. – BladeCoder

+0

@BladeCoder Rất tiếc. Sẽ sửa lại video trong thời gian sau để tránh nhầm lẫn. –

+0

Là một sai lầm. Hoạt ảnh được gây ra bởi thao tác thêm, không phải thao tác cuộn. Do đó, đây là một câu hỏi không hợp lệ. Xin lỗi vì sự nhầm lẫn gây ra. –

Trả lời

3

Thêm dòng này trong Layout.xml bạn

android:overScrollMode="never" 

EDIT:

Một cách khác để di chuyển recycleview

recyclerView.smoothScrollToPosition(position); 
+0

Tôi nghĩ android: overScrollMode chỉ có nghĩa là cho ScrollView? Tôi đã thử nghiệm trên RecyclerView, nó không tạo ra sự khác biệt nào. Hoạt ảnh cuộn vẫn ở đó. –

+0

@CheokYanCheng tôi đã chỉnh sửa câu trả lời của tôi, tôi đã thêm phương pháp khác để cuộn một chế độ xem lại, hãy thử nó – Context

+2

nó không hoạt động. cuộn mượt mà sẽ thực hiện hoạt ảnh cuộn. –

0

Bạn có thể cuộn mà không cần tạo hoạt cảnh với:

recyclerView.scrollToPosition(position) 
+1

Nó không hoạt động. Nó gây ra hình ảnh động. –

0

Điều này có thể được tái tạo một cách dễ dàng khi bạn gọi notifyItemInserted() với scrollToPosition() cùng lúc.

Hoạt ảnh được gây ra bởi DefaultItemAnimator trong lớp trình diễn hoạt ảnh mặc định của RecyclerView.

Tôi đã tìm thấy Youtube video sự cố do người khác tạo lại.

Và tôi có giải pháp quá:

  • Đầu tiên, di chuyển đến vị trí cuối cùng với scrollToPosition().
  • Thứ hai, hãy đợi một chút để cho phép trình quản lý bố cục hoàn tất việc cuộn.
  • Thứ ba, thêm mục vào bộ dữ liệu bộ điều hợp của bạn.
  • Thứ tư, gọi notifyItemInserted()scrollToPosition() ngay bây giờ.

Tôi có ví dụ mã nhưng được viết bằng , nhưng nó giống với với biểu thức lambda. Nếu bạn cần truy cập RecyclerView bên trong Adapter, bạn có thể muốn xem xét Adapter.onAttachedToRecyclerView().

if (Adapter.ListData.Count > 2) Adapter.RecyclerView.ScrollToPosition(Adapter.ListData.Count - 1); 
Adapter.RecyclerView.PostDelayed(() => 
{ 
    Adapter.ListData.Add(new ItemSimplyfiedAdapter.Standard 
    { 
     //Some new item inserting into data set. 
    }); 
    Adapter.NotifyItemInserted(Adapter.ListData.Count - 1); 
    Adapter.RecyclerView?.ScrollToPosition(Adapter.ListData.Count - 1); 
}, 100); 

Đại diện khó thực hiện. Tôi đánh giá cao sự bỏ phiếu của bạn Nếu tôi đã giúp bạn.

Các vấn đề liên quan