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

ViewPager 갱신 관련 도와주세요

0 추천

뷰페이저 갱신 관련해서 질문드립니다.

 

지금 현재  POSITION_NONE을 통하여 갱신하고있습니다.

3초마다 한번씩 갱신되는데 페이지를 이동중 갱신하면 페이지가 원래 자리로 돌아가거나 버벅거립니다.

 

그래서 갱신 방법을 변경할려고 하니 아래와 같은 예가 있습니다.

SparseArray< View > views = new SparseArray< View >();

@Override
public Object instantiateItem(View container, int position) {
    View root = //refresh할 뷰
    ((ViewPager) container).addView(root);
    views.put(position, root);
    return root;
}

@Override
public void destroyItem(View collection, int position, Object o) {
    View view = (View)o;
    ((ViewPager) collection).removeView(view);
    views.remove(position);
    view = null;
}

@Override
public void notifyDataSetChanged() {
    int key = 0;
    for(int i = 0; i < views.size(); i++) {
       key = views.keyAt(i);
       View view = views.get(key);
       //refresh할 작업들 
    }
    super.notifyDataSetChanged();
}

이걸 어떻게 적용해야할지를 몰라서 질문드립니다. 

refresh 할 뷰 , refresh 할 작업들에 어떤 것들을 넣어야 하는지

위 소스코드에 대해 간단히 설명과 사용법정도 기재해 주시면 감사하겠습니다.

그리고 위의 소스코드를 적용하면 사용자들이 페이지를 이동할때 갱신시 버벅거림과 끊김 문제가 사라질까요?

 

 

bellfe0402 (1,770 포인트) 님이 2015년 10월 9일 질문

2개의 답변

0 추천
보통은 자신과 자신의 양 옆의 페이지만 가져오고, 페이지가 바뀔 때 이 작업이 반복됩니다.

1페이지이 일 때는 1, 2

2페이지 일 때는 기존의 1, 2는 그대로 쓰고 3페이지만 가져오죠.

3 페이지로 가면 1페이지는 버리고, 2, 3과 4페이지를 가져오고요.

 

갱신 시 버벅거림은 뷰페이저가 아닌 갱신을 좀 더 빠르게 하거나, 가져오는 양을 적게 하거나 하는 방식을 쓰는게 좋고, 그게 아니라면 off page 인가 하는 옵션이 있는데, 여기에 숫자를 넣으면 한 번에 가져올 페이지의 수가 되니 써보는 것도 좋고요(기본 3개)

 

그렇다고 해도 3초 마다 갱신은 좀 아닌 것 같네요...
쎄미 (162,410 포인트) 님이 2015년 10월 12일 답변
좋은 의견 감사합니다. 데이터가 계속 변경되는 상황이라 3초에 한번씩 갱신하여 실시간의 느낌을 주려고 하고있는데 쉽지 않네요
뷰페이저 안에 Grid뷰가 있어 혹시나 뷰페이지를 삭제하지 않고 Grid뷰의 어댑터 내용만 변경할수 있는 방법이 없을까 해서 질문드렸었습니다.
안드로이드 쉽지않네요 ㅠ
0 추천
리사이클러뷰를 사용하셔서 부분적인 갱신을 하시는 게 좋다고 생각합니다. 네트워크상에서 내려온 데이터는 아이템뷰에서 바로 쓸 수 있는 정도까지 파싱과정을 백그라운드 스레드상에서 처리해주세요.
익명사용자 님이 2015년 10월 13일 답변
...