MW LAB

ViewPager 을 이용한 Fragment 전환 및 스크롤 본문

Study/Android

ViewPager 을 이용한 Fragment 전환 및 스크롤

MWP 2016. 12. 7. 23:08




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