Mam RecyclerView z dużą kolekcją do niego przypisaną, powiedzmy ponad 500 pozycji. Po wywołaniu onBindViewHolder
wykonuję asynchroniczne żądanie HTTP, aby załadować niektóre dane.Widok RecyclerView i tło z dużą kolekcją przedmiotów
Ale kiedy przewijam naprawdę szybko listę, w jaki sposób mogę anulować żądania dla wszystkich przedmiotów, które nie są już widoczne? Widzę 100-tki wniosków rozpocząć w tle ze względu na sposób ładowania RecyclerView, myślę, że na BindViewHolder jest wywoływana dla każdego elementu przewijania przeszłości?
Zastanawiam się, aby uruchomić żądanie w postaci onBindViewHolder
, które czeka 500 ms, a jeśli element powiązany z nim jest nadal w widoku/wciąż taki sam, to rozpoczyna żądanie asynchroniczne. Czy to działa? Jeśli tak, to w jaki sposób mogę sprawdzić, czy przedmiot jest nadal widoczny z poziomu adaptera?
Jaki jest właściwy sposób rozwiązania tego problemu?
można użyć niekończące przewijania design. Na przykład najpierw załadujesz 50 przedmiotów. Jeśli użytkownik dotrze do dna, a następnie załaduje 50 kolejnych. Mam pewne dziwne błędy podczas używania 'RecyclerView' z wywołaniem asynchronicznym. Tak więc nie polecam tego robić. – Joshua