본문 바로가기

카테고리 없음

ViewPager 사용하기

ViewPager는 Fragment버튼이 위에있을 경우 터치하기가 애매하기에 손가락의 가로 스크롤을 통해 자연스럽게 Fragment의 이동을 연출할 수 있다.

버튼을 눌러 화면만 바뀌는 딱딱한 UI와는 비교도 안되게 접근성이 뛰어나기때문에 여러앱에서 자주 보인다.


안드로이드의 기본 api에 포함되지 않아 support에서 지원되기때문에 xml에서는 꼭 귀찮게 android.support.v4.view.ViewPager 이런식으로 붙여야 한다.


여간 귀찮은게 아니다..


java.lang.Object
       android.content.Context
           android.content.ContextWrapper
               android.view.ContextThemeWrapper
                   android.app.Activity
                       android.support.v4.app.FragmentActivity
                           android.support.v7.app.AppCompatActivity

이처럼 AppCompatActivity는 Activity안에 포함되어있지만, MainActivity.java에 사용된 getSupportFragmentManager()

라는 코드는 윗단계인 FragmentActivity부터 사용이 가능하다. 즉, Activity에서는 ViewPager의 사용이 불가능하다는 말이 되는것이다. (훗날 업데이트되어 바뀔지도 모를일이다.)


MainActivity.java

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
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.bino.talkapp;
 
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends AppCompatActivity {
    ViewPager vp;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        vp = (ViewPager)findViewById(R.id.vp);
        Button first = (Button)findViewById(R.id.one);
        Button second = (Button)findViewById(R.id.two);
        Button third = (Button)findViewById(R.id.three);
 
        vp.setAdapter(new pagerAdapter(getSupportFragmentManager()));
        vp.setCurrentItem(0);
 
        first.setOnClickListener(movePageListener);
        first.setTag(0);
        second.setOnClickListener(movePageListener);
        second.setTag(1);
        third.setOnClickListener(movePageListener);
        third.setTag(2);
    }
    View.OnClickListener movePageListener = new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            int tag = (int) v.getTag();
            vp.setCurrentItem(tag);
        }
    };
 
    private class pagerAdapter extends FragmentStatePagerAdapter
    {
        public pagerAdapter(android.support.v4.app.FragmentManager fm)
        {
            super(fm);
        }
        @Override
        public android.support.v4.app.Fragment getItem(int position)
        {
            switch(position)
            {
                case 0:
                    return new One_Fragment();
                case 1:
                    return new Two_Fragment();
                case 2:
                    return new Three_Fragment();
                default:
                    return null;
            }
        }
        @Override
        public int getCount()
        {
            return 3;
        }
    }
}

cs