ViewPager에서 탭 구현시 옆 탭을 미리 읽는 문제..

Posted by 빵빵빵
2015/03/11 11:21 전산(컴퓨터)/안드로이드



문제라고 하기보다는 현재 보이는 탭의 옆 탭을 미리 읽어둬서 탭 슬라이드로 넘어갈때 자연스럽게 넘어가게 하는 기술이라 보겠다.
(액티비티 형태의 프로그램만 만지작 하다가 요즘 프래그먼트 형태의 프로그램을 만지작하다보니 삽질의 연속이다.)


하지만 옆 탭이 로딩하는데 통신같은 상당한 시간이 걸리거나, 심지어 프로그래스다이얼로그까지 나타나는 탭이라면 골치가 아파온다.

왜냐! 현재 탭은 이미 화면에 나타나서 잘 보이고 사용자의 입력을 기다릴 타이밍인데,

옆 탭을 미리 로딩하면서 현재화면에 프로그래스다이얼로그가 나타난다? 켁...

(이걸 해결하기 위해 몇시간을 삽질했다... ㅜㅡ 알고보면 이렇게 간단한 것을.... )
(물론, 미리 로딩하는 걸 안하게 프로그램하는 방밥이 있을~지도 모른다.....만 안찾아봤다.. ㅡㅡ)


이제 하나하나 스텝별로 짚고 넘어가 볼까요?


상황을 하나 가정해 본다.

탭이 로딩될때 스레드로 통신을 해서 데이터를 화면에 보여주는 것이라고 하자...


현재 사용자에게 보이는 탭 화면이 자신인지는 다음과 같이 판단한다.

TabActivity는 탭을 감싸고 있는 Activity

tabIdex는 자기 자신이 TabActivity에 붙는 순번(인덱스)

탭이 표시되는 클래스의 onCreate나 onResum이나 onCreateView 등등에 아래와 같은 코드를 넣을 수 있겠죠?




이렇게 해놓으면 미리 읽어들이는 중에서는 프로그래스 다이얼로그가 표시되지 않는다.

만일 사용자가 화면을 휙휙휙 넘겨서 쓰레드가 끝나기 전에 해당 화면으로 오면???

프로그래스 다이얼로그가 표시되어야 하는데 표시되지 않고 사용자가 뭔가를 입력할 수 있는 상황이 된다.

어랏??? 이것도 쬐끔 위험한 일이다.. 그래서 막아보자~~~

다음 코드를 넣어주면 된다.




마지막으로 이 프로그래스 다이얼로그는 쓰레드 종료 시점에 다음 코드로 종료해 주면 되것다.




작업환경 : 안드로이드 스튜디오 1.1.0
참고자료 : http://stackoverflow.com/questions/9323279/how-to-test-if-a-fragment-view-is-visible-to-the-user

2015/03/11 11:21 2015/03/11 11:21

이 글에는 트랙백을 보낼 수 없습니다