Skip to content

무한 스크롤(프리 로딩) 에러 해결#5

Open
ch-Yoon wants to merge 1 commit into
boostcampth:masterfrom
ch-Yoon:develop/ch-yoon
Open

무한 스크롤(프리 로딩) 에러 해결#5
ch-Yoon wants to merge 1 commit into
boostcampth:masterfrom
ch-Yoon:develop/ch-yoon

Conversation

@ch-Yoon

@ch-Yoon ch-Yoon commented Jan 16, 2019

Copy link
Copy Markdown

개요

  • 무한 스크롤 기능 에러 해결

에러 내용

무한 스크롤 기능이 특정 시나리오에서 오류가 발생되는 것을 확인했습니다.

  1. 검색어를 입력한 뒤, 검색 버튼을 눌러 영화 정보를 요청
  2. 목록이 구성되면, 하단으로 스크롤
  3. 스크롤이 하단에 위치하면, 추가 영화 정보가 요청됨
  4. 이때, 검색 버튼을 재빠르게 눌러서 새로운 영화 정보를 요청

위의 시나리오대로 진행을 하면, 검색 버튼을 눌러서 요청한 새로운 영화 정보가
리스트의 가장 상단에 노출되어야 할 것이라고 생각했습니다.

하지만 새로운 영화 정보가 아닌 ,스크롤에 요청된 추가 영화 정보가 리스트의 가장 상단에
위치하는 것으로 확인했습니다.

GIF 파일을 첨부하였습니다. 스크롤을 한 뒤 빠르게 검색 버튼을 누르면,
처음과는 다른 영화가 리스트 가장 상단에 노출되는 것을 확인하실 수 있습니다.

ezgif-4-2bca4825d581

에러 원인

다음과 같은 이유로 인해 상위에서 설명한 에러가 발생됩니다.

  1. 최초 검색 버튼을 클릭하여 20개의 영화 정보를 수신 (Adapter에서 20개 item 보유)
  2. 목록이 구성되면, 하단으로 스크롤하여 추가 영화 정보 요청
  3. 이때, 검색 버튼을 재빠르게 클릭
  4. 현 시점은, 스크롤에 의해 추가 영화 정보가 요청되었고, 검색 버튼이 클릭된 상태
  5. 검색 버튼 클릭으로 인해 loadItems에 true가 전달
  6. 전달된 true 값에 의해 초기화 작업 진행 (초기화 작업으로 인해 Adpater에서 0개 item 보유)
  7. 초기화 작업 이후, isLoading의 state가 true이므로 새로운 영화 정보를 요청 못함
  8. 결국, adapter 내부에 list는 clear 되었지만, 영화 정보를 요청하지 못함
  9. 그 후, 스크롤에 의해 요청된 추가 영화 정보가 도착
  10. 도착한 추가 영화 정보를 Adapter에 addAll (Adapter에서 20개 item 보유)

지금까지 설명한 시나리오로 진행되면, 검색 버튼을 눌렀지만 API 서버에 존재하는 1 ~ 20의 영화 정보가 아닌 21 ~ 40의 영화 정보가 list의 가장 상단에 노출됩니다.


해결 방안

검색 버튼 클릭 후 repository로부터 item을 수신합니다.
이때, 요청했었던 start 값이 만약 1이라면, adapter의 list size를 확인합니다.
만약 list size가 0이 아니라면 list를 clear하는 방법으로 error를 해결했습니다.

When the movie information was received using the search button, I solved preloading error by clearing the adapter list.
// 마지막 페이지가 아니고 로딩중 아닌 경우 getMovieList 호출
if(!isLoading.get() && !isEndOfPage) {
getMovieList();
} else if(isRefresh) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

loadItems() 메서드에서 isLoading.get() == true이면 아이템 클리어 동작도 안하게 하는 방법은 어떨까요?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 error를 해결하기 위해 getMovieList() 함수 내부를 수정하였습니다.
다만, 해당 부분만 수정하여도 정상작동되기에 추가적인 처리를 해주지 않았습니다.
말씀해주신 내용을 반영하는 것도 좋을 것으로 판단됩니다. 감사합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants