Tôi đang gặp một vấn đề với các phương pháp sau đây:RecyclerView: tìm mục có thể nhìn thấy cuối cùng ngay sau khi xem tạo
int firstVisibleItemPosition = gridLayoutManager.findFirstVisibleItemPosition();
int lastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition();
Thân Mục Tiêu: tiết kiệm dữ liệu phân tích về những gì mục người dùng đã xem.
Để làm được điều đó, tôi gọi phương pháp này trong hai kịch bản khác nhau:
mỗi lần di chuyển quay sang "nhàn rỗi" nhà nước, và kiểm tra các mặt hàng có thể nhìn thấy là gì. trong trường hợp đó tôi nhận được các chỉ mục dự kiến.
khi số
RecyclerView
trở thành "hiển thị" cho người dùng. bây giờ là khi sự cố bắt đầu. Tôi hy vọng rằng khi mảnh chứa recylcerView được chuyển quaonResume()
thì gọifindLastVisibleItemPosition()
sẽ trả về các mục hiển thị. nhưng lại trả về -1, trong trường hợp đó. Tôi đoán nó có cái gì đó để làm với tải không đồng bộ của recyclerView + adapter khởi tạo mục nội bộ liên quan đến vòng đời mảnh/hoạt động.
bằng cách trì hoãn mã này sau vài mili giây - findLastVisibleItemPosition()
trả về đúng chỉ mục. nhưng tôi không muốn trì hoãn mã hóa cứng bằng cách sử dụng trình xử lý + runnable bị trì hoãn, vì lập lịch biểu runnable chậm là một công việc xung quanh những gì tôi thực sự muốn thực hiện: phát hiện khi chế độ xem của trình thu thập kết thúc tăng và vẽ lên màn hình tất cả các chế độ xem có thể chân bên trong của nó ..
nên câu hỏi của tôi về cơ bản:
làm thế nào tôi có thể phát hiện khi RecyclerView hoàn thành tất cả các initialzation/đo/lạm phát và bản vẽ của nó con vật phẩm chân vào màn hình? (trước khi bất kỳ tương tác người dùng nào ..).
có cách nào thực hành tốt đáng tin cậy để biết chính xác mục nào trong 'chế độ xem tái chế thực sự được hiển thị trên màn hình không?
Xin chào, bạn có nhận được bất kỳ câu trả lời đáng tin cậy nào sau bài đăng này không, @Tal Kanel? Tôi đang đối mặt với những vấn đề tương tự. – hadez30
@ hadez30: giải pháp của tôi là chạy kiểm tra mã cho mục hiển thị đầu tiên từ một runnable được đăng bởi một trình xử lý trên chuỗi giao diện người dùng (không bị trì hoãn ..). Đó là lý do tại sao nó được thực hiện vào cuối hàng đợi UI mà từ kinh nghiệm của tôi xảy ra sau khi các khung nhìn đã được gắn vào khung nhìn tái chế –