6

Để tái tạo sự cố, tôi nhân bản một existing project và thêm hai đoạn. Vì vậy, bây giờ có một Activity với một ViewPager có 2 mảnh. Mỗi Fragment có một số RecyclerView (dọc) chứa nhiều mục của RecyclerView (nằm ngang).Autoscroll isuue khi RecyclerView nằm ngang được đặt như một mục trong một RecyclerView dọc

Bây giờ vấn đề là autoscroll của dọc RecyclerView trên tab chuyển khi giữa điểm ngang RecyclerView bị bỏ lại ở phía trên.

Ví dụ:

  1. Trang 1 là cuộn đến vị trí này

(Chú ý rằng quan điểm H-Recycler đầu tiên được thiết lập như chỉ là một nửa có thể nhìn thấy)

  1. Sau đó, nhấn vào PAGE 2 trên tablayout để đi đến trang 2.

  2. Bây giờ lại chạm vào PAGE 1 trên tablayout để quay trở lại trang 1. Ở đây vị trí cuộn mong đợi là nơi chúng tôi rời trước đó nhưng nó tự động cuộn đến vị trí hàng đầu. như thế này

(Đầu RecyclerView là đầy đủ có thể nhìn thấy thay vì một nửa.)


Tôi có một số manh mối trong khi tìm ra giải pháp.

  • Sự cố này xảy ra với thư viện v24.1.1 và v24.2.1 (mới nhất tại thời điểm viết) nhưng khi được hạ cấp xuống v23.4.0, nó hoạt động như mong đợi. Vì vậy, rõ ràng là một cái gì đó được sửa đổi trong thư viện dẫn đến hành vi này.
  • Đã gặp sự cố tương tự với một mục có chứa chế độ xem web. Điều thông thường giữa webView và H-recyclerView là cả hai đều có thể di chuyển theo chiều ngang. Vấn đề có thể liên quan đến việc tiêu thụ sự kiện cuộn.
+0

bạn đang gọi điều gì đó trên trangVề sự kiện có thể xảy ra hay gì đó? – Jai

+0

Không ... Không có gì được gọi khi gợi ý hiển thị của người dùng bị thay đổi. – HBB20

Trả lời

0

Bạn có thể lưu trạng thái cuộn khi Fragment của số ViewPager đang chuyển. Cho phép có một biến static trong Activity của bạn mà sẽ lưu trữ các trạng thái cuộn như thế này

public static int scrollPositionIndex; 
public static int scrollPositionOffset; 

Bây giờ từ Fragment của bạn, ghi đè lên setUserVisibleHint chức năng.

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    // Make sure that we are currently visible 
    if (this.isVisible()) { 
     // If we are becoming invisible, then... 
     if (!isVisibleToUser) { 

      // Save scroll state 
      LinearLayoutManager layoutManager = ((LinearLayoutManager) mRecyclerView.getLayoutManager()); 
      YourActivity.scrollPositionIndex = layoutManager.findFirstVisibleItemPosition(); 

      View v = mRecyclerView.getChildAt(0); 
      YourActivity.scrollPositionOffset = (v == null) ? 0 : (v.getTop() - mRecyclerView.getPaddingTop()); 

     } else { 
      // Scroll to the saved position 
      mLayoutManager.scrollToPositionWithOffset(YourActivity.scrollPositionIndex, 
        YourActivity.scrollPositionOffset); 

      // Reset the value 
      YourActivity.scrollPositionIndex = 0; 
      YourActivity.scrollPositionOffset = 0; 
     } 
    } 
} 
+0

Cảm ơn bạn đã trả lời. Tôi đã thử giải pháp của bạn nhưng vẫn cư xử giống nhau ... Nó tự động cuộn .. – HBB20

+0

Vấn đề bạn đang gặp phải ở đây là gì? 'setUserVisibleHint' được gọi hay không? Có thể lưu vị trí được cuộn không? –

+0

setUserVisibleHint được gọi nhưng sau đó nó cuộn lên đầu .... – HBB20

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