MW LAB
ViewPager 을 이용한 Fragment 전환 및 스크롤 본문
MainActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class MainActivity extends AppCompatActivity { ViewPager pager; //ViewPager 참조변수 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //ViewPager 객체 참조 pager= (ViewPager)findViewById(R.id.pager); //ViewPager에 설정할 Adapter 객체 생성 //ListView에서 사용하는 Adapter와 같은 역할. //다만. ViewPager로 스크롤 될 수 있도록 되어 있다는 것이 다름 //PagerAdapter를 상속받은 CustomAdapter 객체 생성 //CustomAdapter에게 LayoutInflater 객체 전달 FragmentAdapter adapter= new FragmentAdapter(getLayoutInflater(),3); //ViewPager에 Adapter 설정 pager.setAdapter(adapter); } } | cs |
ViewPager 를 선언과 초기화 해주고, ViewPager 에 Adapter(FragmentAdapter) 를 설정해주면 된다.
activity_main.xml
1 2 3 4 5 6 | <android.support.v4.view.ViewPager android:layout_weight="7" android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> | cs |
FragmentAdapter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | public class FragmentAdapter extends PagerAdapter { LayoutInflater inflater; int numOfPage; public FragmentAdapter(LayoutInflater inflater, int numOfPage) { // LayoutInflater 를 초기화 this.inflater=inflater; // 프래그먼트들의 갯수를 설정 this.numOfPage = numOfPage; } // PagerAdapter 의 개수를 리턴하는 함수 @Override public int getCount() { // 프래그먼트들의 개수를 return 한다. return numOfPage; } //ViewPager가 현재 보여질 Item(View객체)를 생성할 필요가 있는 때 자동으로 호출 //쉽게 말해, 스크롤을 통해 현재 보여져야 하는 View를 만들어냄. //첫번째 파라미터 : ViewPager //두번째 파라미터 : ViewPager가 보여줄 View의 위치(가장 처음부터 0,1,2,3...) @Override public Object instantiateItem(ViewGroup container, int position) { View view=null;//현재 position에서 보여줘야할 View를 생성해서 리턴... //새로운 View 객체를 Layoutinflater를 이용해서 생성 //position마다 다른 View를 생성 switch( position ){ case 0: //첫번째 Tab을 선택했을때 보여질 뷰 view= inflater.inflate(R.layout.tab0, null); break; case 1: //두번째 Tab을 선택했을때 보여질 뷰 view= inflater.inflate(R.layout.tab1, null); break; case 2: //세번째 Tab을 선택했을때 보여질 뷰 view= inflater.inflate(R.layout.tab2, null); break; } //ViewPager에 위에서 만들어 낸 View 추가 if(view != null) container.addView(view); //세팅된 View를 리턴 return view; } //화면에 보이지 않은 View 를 없앰. //첫번째 파라미터 : ViewPager //두번째 파라미터 : 파괴될 View의 인덱스(가장 처음부터 0,1,2,3...) //세번째 파라미터 : 파괴될 객체(더 이상 보이지 않은 View 객체) @Override public void destroyItem(ViewGroup container, int position, Object object) { //ViewPager에서 보이지 않는 View는 제거 //세번째 파라미터가 View 객체 이지만 데이터 타입이 Object여서 형변환 실시 container.removeView((View)object); } //instantiateItem() 메소드에서 리턴된 Ojbect가 View가 맞는지 확인하는 메소드 @Override public boolean isViewFromObject(View v, Object obj) { return v==obj; } } | cs |
ViewPager 에 Fragment 들을 표시하고, 관리하기 위한 Adapter 이다.
Listview 의 BaseAdapter 와 비슷하다.
참조 : http://kitesoft.tistory.com/80
'Study > Android' 카테고리의 다른 글
안드로이드 실시간 위치추적 개발 (2) | 2017.10.07 |
---|---|
테두리가 있는 형태 xml 만들기 (0) | 2017.01.22 |
ViewPager 무한 스크롤 (0) | 2016.12.07 |
Gradle 환경 카카오톡 SDK 사용 (0) | 2016.11.30 |
APK 파일 디컴파일 (0) | 2016.11.30 |
Comments