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

viewpager 갱신시 전체가 아닌 각페이지를 갱신시키는법.

0 추천
안녕하세요 독학하는 학생입니다.

제가 뷰페이저를 갱신하께 만들기 위해서 vpAdapter.notifyDataSetChanged();를 사용했는데(getItemPosiotion() 오버라이드 했습니다.) 갱신될때마다 화면이 다시 나오는게 눈에 거슬리네요. 어짜피 갱신하는 이유가 보이지 않는 페이지의 데이터갱신을 위함인데. 그래서 페이지 마다 갱신시키는 방법이있다는거 같은데 잘 못찾겠네요..

instantiateItem() 메소드로 setTag해서 어쩌고 하라는데 그게 잘 이해도안가고 deprecated돼있네요..

방법아시는분 답변부탁드립니다 ㅜㅜ
원펀치맨 (2,860 포인트) 님이 2016년 8월 8일 질문

1개의 답변

+1 추천
 
채택된 답변
ViewPager에 추가된 1개의 Fragment 전체 내용을 갱신 시킨다는 내용이겠죠?

저도 여러가지 찾아봤는데 제일 좋은것은 fragment에 함수를 만들어서 특정 View만 명시적으로 갱신을 시켜주는것이 좋은 방법인거 같습니다.

물론 ViewPager설정에 따라 모든 페이지를 초기화 하지는 않을거니까 초기화 된 페이지만 수정하도록 예외처리는 해줘야 하겠죠.
Development Guy (70,570 포인트) 님이 2016년 8월 9일 답변
원펀치맨님이 2016년 8월 9일 채택됨
답변감사합니다..그런식으로 하면 현재 프레그먼트에서 다른 프레그먼트의 내용을 갱신 시킬 수 있나요? 그리고 제가 잘 몰라서 그러는데..참고할만한 링크같은거 있으면 알려주실 수 있나요? 글은 알아도 어떻게 쓰는지를모르니 ㅜㅜ
죄송하지만 특별히 참고했다기 보다 찾다찾다 안되서
제가 임의로 아래처럼 했던것으로 기억합니다.

Fragment를 상속받는 클래스로 ItemFragment라는것을 만들어서  public 멤버 함수로 setText(String arg)와 멤버 String 변수를 만들어서

setText함수를 호출하였을때 해당 Fragment가 onCreateView 상태이면 바로 TextView값을 바꿔주고 아니면 String 변수에 값을 담아뒀다가 페이지 넘기면서 onCreateView상태가 되면 String변수에 담겼던 값을 TextView에 썼던것으로 기억합니다.

물론 이렇게 하려면 FragmentAdapter가 각 Fragment를 멤버 인스턴스로 가지고 있어야 해요. 하지만 만약 Fragment페이지가 많다면 제가 하는 방식은 추천해 드리고 싶지 않습니다. 제가 했을때는 리소스때문인지 몰라도 기기에 따라 OOM 에러를 뱉어내기도 했으니까요.

보통 인터넷에 나오는 예제는 따로 멤버로 두지 않고 FragmentAdapter의 getItem이 호출될때 Fragment를 초기화 하여 리턴하도록 되어 있더라구요. 이게 사실 일반적이고 정석적인 방법이긴 합니다. 안드로이드 레퍼런스 사이트에도 이런식으로 나와 있어요.(https://developer.android.com/training/animation/screen-slide.html#pagetransformer) 메모리때문에 Fragment는 껍데기로만 두고 데이터 관리는 따로 하도록 권고하더군요.

Fragment와 PagerAdapter의 생명주기에 관해서 조금 더 연구해 보시면 제가 한거보다 훨씬 좋은 방법이 있지 않을까 생각이 됩니다.
더 좋은 방법 찾게 되신다면 저에게도 피드백 주시면 감사드리겠습니다. ^^
답변감사합니다. 참고해서 한번 해보겠습니다ㅜㅜ 어렵네요 역시
...