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

ViewPager관련질문. 뷰의 갱신

0 추천
안녕하세요, 안드로이드 초보 개발자입니다.

 

ViewPager를 이용해서 3장짜리 페이지를 만들고 있습니다.

근데 각 페이지가 상황에 따라 조금씩 달라집니다. 예를들어 mIsOKstate 변수의 값 상태가 true이면 3페이지의 텍스트색깔이 Color.RED 여야하고, false이면 Color.BLACK이어야 합니다.

페이저어댑터의 instantiateItem 메소드에 state를 구별하여 텍스특색을 변경해주는 코드를 넣었으며, 2,3페이지를 왔다갔다할때는 이상없이 되는것을 확인하였습니다.

 

근데 1페이지에 왔다가 다시 3페이지에 가면 약 0.5~1초 정도의 시간을 두고 텍스트색이 변합니다.

(디폴트색상에서 state의 값에 따른 색상으로)

 

이게... 1페이지에가는 순간 3페이지는 destroy되었다가, 다시 3페이지에 갈때 뷰가 생성되고, 그후에 텍스트색상이 적용되는 것같은데요...

 

혹시 이 문제( 1페이지까지 이동했다가 2페이지를 지나, 3페이지로 갈때 텍스트색상이 늦게 변하는 문제)에 대한 해결책 아시는분, 조언 부탁드립니다!!
블랙이요블랙 (12,860 포인트) 님이 2013년 4월 4일 질문

3개의 답변

0 추천
이게... 1페이지에가는 순간 3페이지는 destroy되었다가, 다시 3페이지에 갈때 뷰가 생성되고, 그후에 텍스트색상이 적용되는 것같은데요...

 

원래 뷰 페이져의..방식입니다..

포커스가 맞춰진 양 옆의 뷰를 보존하고 나머지를 죽이지요...

 

고로 1번을 보고 있노라면 3번은 없어지지요...

 

생성 시간차를 줄이는것은..뭐 해당 뷰를 미리 정의를 해두던가...저장을 해두던가...플래그먼트를 쓰시거나..여러가지 방법이 있지 않을까요...-0-

 

그리고... 왜 state에 따라 색상을 바꿔주죠...

초기화 할때 바로 그 색상으로 입혀버리면 될 것을..

디폴트색상>state에 따른 색상보다 처음부터 state에 따른 색상 으로 가면 되지요...-0-;;
정품인증 (1,750 포인트) 님이 2013년 4월 4일 답변
0 추천
viewpager 를 사용하실때는 일반 뷰를 직접 뿌리는것보다는 fragment 를 사용하시는게 정신건강에 이롭습니다. 경험상 뷰를 직접 뿌리는경우 특이한 현상들이 자꾸 발생해서 사람 미치게 만들더군요;

 

IsOkStateChangeListener 같은 인터페이스를 정의하고 각 fragment 가 구현해서 mIsOkState 변수가 변할때 각 fragment 자체적으로 텍스트색을 변경하도록 설계하는게 자바의 방향과 좀더 맞을것으로 생각됩니다.
엥꼬 (1,170 포인트) 님이 2013년 4월 4일 답변
프래그먼트나 뷰나 어짜피 뷰페이저 내부 로직은 같습니다... 아마도 특이현상은 다른것에 의해 비롯된게 아닐가 싶습니다
0 추천

setOffscreenPageLimit(int limit) 이걸 사용하시고 limit를 넉넉히 주시면 새로 생성을 안합니다^^

둔산호림 (220 포인트) 님이 2013년 4월 16일 답변
...