ViewPager(뷰페이져) Preload 문제 관련
ViewPager(뷰페이져)
Preload 문제관련
ㆍ 요즘 Fragment에서 ViewPager를 많이 쓰는데
많이 쓰는 만큼 해결해야 하는 부분도 많은 것 같다.
ㆍ ViewPager는 사용하는 Fragment 화면에 들어가게 되면
Preload되는 현상이 있다.
ㆍ 예를 들어 ViewPager의 페이지가(item) 3개일 경우
첫화면(첫페이지)에서는 2번째 페이지를 이미 load 하고 있다
마찬가지로 2번째 페이지로 넘어갔을때는 3번째 페이지까지 load한다
이렇다 보니
발생하는 문제점이 있다.
예를 들어
1번째 페이지에서
작업하던 값을
2번째 페이지로
넘겨서 뿌려야하는 경우가 있다.
첫번째 값에 따라
2번째 페이지의 레이아웃이
변한다던가
아니면 첫번째값의
결과에 따라
전체 Pager의 수가
달라지는 경우라던가
하여튼,
이런 문제를 해결하기
위해 구글링을
많이 해봤는데
그 중에
setOffscreenPageLimit라는
답변이 많이 보였다
근데 대부분 답변에 달린
댓글을 보면 안된다는
댓글이 많다..
그래서 나도
안될것 같아서
안해봤다.
(대충 0이 들어가야할것 같은데
최소 1이 들어가야 한단다..)
무튼...
좀 더 찾아보니
눈에 확 들어오는 방법이
있었다.
그것은 바로
setUservisibleHint
이것이었다..
대충 코드는
이렇다.
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser)
{
//실제로 사용자 눈에 보이는경우
}
else
{
// 전페이지에서 Preload 될 경우
}
}
이게 무슨말인가 하면
지금 사용자의 눈에
실질적으로 그 페이지가
보여지고 있느냐
없느냐 이다..
이 코드를
ViewPager의
2번째 페이지에
넣는다.
Alt+Insert해서
오버라이드 하면
바로 쉽게 추가된다.
그리고
넘어오는 파라미터는
boolean값이므로
true : 사용자의 눈에 보인다
false : 사용자의 눈에 안보인다(preload)
여기서 처리를 해주면 된다.
false일때는
만약 미리
넘어와서 오류가 생기는경우
예외처리 해주면 되고
true일때는
전 페이지에서의
값을 받으면 된다.
Log를 찍어보면
첫번째 페이지에서
불려올때
setUserVisibleHint는
onCreateView보다
먼저 걸린다.
그리고 1페이지에서
2페이지로 넘어올때
onCreateView는
호출이 안되는데
setuserVisibleHint는
호출이 된다.
그러므로 1페이지의
결과값을 반영하려면
setUserVisibleHint에서
처리해주면 될 것같다.
테스트만 간단히 해봤지만
실제로 사용해도
문제가 없을 것 같다.
'안드로이드(android) > 개발중 생긴일' 카테고리의 다른 글
Multiple?병렬? executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) (0) | 2016.07.26 |
---|---|
안드로이드 OpenCV(3.0이상) Highgui 에러 (0) | 2016.07.16 |
SeekBar 터치 불가 만들기 (0) | 2016.06.28 |
GridView(그리드뷰)에서 Scroll 막기 (0) | 2016.06.17 |
FragmentPagerAdapter 문제점(공백?초기화?empty?) (0) | 2016.06.16 |