마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰페이저 setOffScreenLimit(미리불러오기) 사용안하는 방법 없나요?

0 추천
뷰페이저 인디케이터를 써서 탭이있는 뷰페이저를 구성하였습니다.

각 페이지에 따라 서버와 통신하여 값을 받아오게 되어있는데요.

setOffScreenLimit 때문에 미리 일부 페이지가 불러와져서 자원 손실이 매우 큰상태입니다.

또한 미리 구성된 페이지로 이동했을때에 onCreate, onCreateView, onStart, onResume 등이 다 호출되지 않기때문에

일부 기능 구현에 심각한 문제가 발생하고있습니다.

예를 들어서 마지막 페이지로 이동하면 팝업형식의 커스텀 액티비티가 실행되고 그 결과에 따라 마지막 페이지 내용이 바뀌어야 하는데 그러한 부분에서 문제가 발생하고있습니다.

혹시 미리불러오지 못하게 막는 방법이나, 아니면 미리불러와진 페이지에 진입할때 호출되는 메서드가 있다면 알고싶습니다.

혼자서 이래 저래 머리를 굴려보았는데 답이 없네요...

도움 부탁드리겠습니다.
son7872 (150 포인트) 님이 2015년 1월 26일 질문

3개의 답변

+1 추천
미리 불리는 것을 막을 방법은 없습니다.

서버 통신등을 페이지가 불려질 때가 아니라 실제로 화면에 보일 때 하도록 수정하면 될 것 같습니다.
익명사용자 님이 2015년 1월 26일 답변
답변감사합니다.
아래의 uno님 도움으로 해결하였습니다 ^^
+1 추천

OnPageChangeListener의 onPageSelected 콜백을 이용하시면 될 듯 싶군요.

mPager.setOnPageChangeListener(mPageChangeListener)

private ViewPager.OnPageChangeListener mPageChangeListener = new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {}
@Override
public void onPageScrollStateChanged(int arg0) {}
};
Gradler (109,780 포인트) 님이 2015년 1월 26일 답변
답변감사합니다.
제가 원하던 답변이 아니네요 ㅠㅠ
아래의 uno님 도움으로 해결하였습니다.
+1 추천

페이지를 android.support.v4.app.Fragment 로 구성하셨으면 setUserVisibleHint 메소드를 쓸 수 있어요

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) {
        /*
        사용자에게 선택된 프래그먼트입니다.
        */
    } 

    else {
        /*
        미리 불러왔지만 사용자에게 선택된 프래그먼트는 아닙니다
        */
    }
}

 

uno (3,820 포인트) 님이 2015년 1월 26일 답변
정말 감사합니다.
도움주신 덕분에 문제를 해결하였습니다 !!!
...