2015년 10월 20일 화요일

FRAGMENT 사용을 위한 개념 정리





Fragment를 사용하기 위해서 개념을 정리해 보았다.

Fragment를 사용하는 건 사용자에겐 편리할지 모르나 개발자에겐 좀 복잡한 작업이다. 
특히 Fragment와 ViewPager와 ActionBar와 
DrawerLayout이 함께 엮이어 돌아갈 경우는 더더욱 머리가 복잡해 진다. 따라서 전체적인 개념이 정리가 필요하다. 
본 포스트는 Fragment를 기본적으로 사용해 본 경험이 있는 분들이라야 의미가 있으리라고 생각된다.
아래는 Fragment의 동작 메커니즘을 정리해 본 내용이다.

-. Activity가 Fragment를 담기 위해서는 일반 Activity로는 안되고
   android.support.v4.app.FragmentActivity를 extends해야한다.
   public class ExViewPagerActivity extends FragmentActivity { ... }

-. 여기서 Fragment간의 이동을 부드럽게 되도록 해 주는 용도로 ViewPager를 채용하면
   된다.  즉 FragmentActivity에 ViewPager를 담으면 된다.
   ViewPager는 Layout manager that allows the user to flip left and right through
   pages of data의 역할을 한다.

-. ViewPager에 담을 데이터와 ViewPager에 보여줄 View를 생성하기 위해서는 adapter
   클래스가 있어야 한다.  마치 ListView에 표시할 데이터와 표현하는 방식(View)를 제공하는
   역할의 adapter를 필요로 하는 것과 같다. 

-. ViewPager가 사용할 adapter 클래스는 두 가지 종류가 있는데
    FragmentPagerAdapter와 
    FragmentStatePagerAdapter가 있다.

-. FragmentPagerAdapter는 표시할 page의 수가 고정되어 있고 몇개 되지 않을 때
   사용하는 용도이고(이 adapter를 사용하면 모든 page를 메모리에 다 로드해 두고서
   page 이동을 하는 방식이다)

-. FragmentStatePagerAdapter는 표시할 page의 수가 고정되어 있지않고 또 많을
   경우에 사용하는 adapter이다. 이 경우의 page 이동은 매번 현재 page를 destroy한 후
   새 page를 생성하는 식이다. 

-. 이 두 adapter 클래스를 상속받은 클래스는 
   public int getCount()과 
   public Fragment getItem(int position)를 필요에 맞게 재정의해서 사용하면된다.

-. ViewPager를 setAdapter() 할때 getCount()와 getItem()이 차례로 호출된다.
   public void setAdapter (PagerAdapter adapter)

-. getCount()는 page의 갯수가 몇 개인지를 알려주는 기능이고 getItem()은 adapter에게
   ViewPager에 공급할 Fragment를 반환(제공)해 주는 역할을 한다.

댓글 없음:

댓글 쓰기