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 |