2013.11.06 00:27

먼저 안드로이드 SDK에서 support라이브러리가 모두 갖춰졌다는 가정하에 진행합니다.

여기에 필요한 버전은 v4와 v13 두개가 필요합니다.


* 아무래도 따로 ViewPagerIndicator 라이브러릴 쓰는게 아니라서 그런지 좀 더럽고? 복잡하고? 잘 모르겠지만 일단 성공... 했으니 포스팅합니다. 


먼저 결과물부터..





이런식으로 마치 구글플레이스토어에서 좌우 스와이프해서 Fragment를 둘러보는 형태입니다.

물론 단순 ViewPager 사용하는건 프로젝트 만들때 기본제공해주지만 여기서 추가할 기능은 Preference 연동 기능입니다.

(타이틀 클릭해서 넘어가기가 안되긴 한데...-_-)


몇개월전에 시도했을때 문제가 됬던 문제를 꼽아보자면,


PreferenceFragment 와 Fragment간의 타입 관련이 전혀 없다는점. (네이밍만 Fragment일 뿐이지, PreferenceFragment는 v4에서 지원하는 클래스임. 따라서 Fragment상속도 v4의 것을 받는듯. 그래서 타입 compatibility하지 않음.)


이거 말고도 몇개 있었는데 기억이 안나서 일단 패스.


먼저 도움이 됬던 링크


http://stackoverflow.com/questions/15845632/adding-preferencefragment-to-fragmentpageradapter

http://thdev.net/373


답변글의 일부를 발췌하자면 


This answer led me to the solution of using the v13 support library, which includes a FragmentPagerAdapter that uses bona-fide android.app.Fragments so it can support the PreferenceFragment.

Assuming you use Eclipse and run the new app wizard with the "Scrollable Tabs + Swipe" Navigation (which gives you the v4 pager boilerplate), here are the modifications you need to make to upgrade to v13:

  • Delete "android-support-v4.jar" file from your libs folder
  • Copy "android-support-v13.jar" from SDK_PATH\extras\android\support\v13; if it's not there, use the SDK manager to install or update "Extras/Android Support Library"

Then, in the Java file:

  • Change FragmentPagerAdapter import from v4 to v13
  • Change FragmentActivity to a plain Activity
  • Change calls to getSupportFragmentManager to getFragmentManager
  • Import all necessary classes from android.app instead of android.support.v4
  • (Except: you still need to use the v4 ViewPager, but it's compatible)

I've copied the modified source below, verified on latest Jellybean.


대충 발번역을 하자면, v13 라이브러리를 사용해서 v4와 짬뽕을 해줘야 한단 소리.


소스 코드는 링크에 자세히 나와있으니 그대로 가져다가 사용하면 되고 몇개 없는 layout이나 xml 파일은 직접 만들면 되는데 귀차니즘이 클 수 있기에 일단 조금 수정한 샘플 코드를 첨부합니다.


더보기



첫번째 xml이 viewpagertest.xml 레이아웃인데 ViewPager태그를 넣어주면 되는듯듯

두번째는 더미파일이다.



이렇게 준비는 다 된듯 싶은데 컴파일이 안된다.

(또는 컴파일은 되는데 막상 접근했을때 런타임에러를 내뿜거나...)


상위 클래스 정의를 못찾겠다는둥, 라이브러를 못찾겠다는둥...


먼저 나는 gradle로 빌드를 하는데 gradle에 라이브러리를 추가했다고 적어줘야 한다.

(물론 그전에 IDE에 라이브러리가 추가되있고 프로젝트 설정에 등록되있어야 한다.)


gradle에 등록하는것도 꽤나 삽질했는데 단순하게 한줄만 추가해주면 된다.


build.gradle 에서

dependencies {

compile files('libs/android-support-v13.jar')

}


이렇게 등록해주면 된다.


아! 반드시 clean해주고 빌드해주는게 좋다. 


몇달간 고민했던거 갑자기 구현되니까 기분 좋네요.ㅋㅋ

저작자 표시 비영리 변경 금지
신고
Trackback 0 Comment 0


티스토리 툴바