[Android] ViewPager
Viewpager란?
: 여러개의 화면(Fragment)을 책 페이지처럼 한 장씩 보도록 지원하는 기능.
=> (가로) 스크롤뷰 + 스크롤 위치를 강제시키는 기능이 추가된 개념.
=> 인스타그램 피드 느낌
사용법
1. 액티비티에 프래그먼트를 직접 올리는게 아님.
=> ViewPager를 액티비티에 올려두고
=> 이 ViewPager의 재료로써 프래그먼트들을 제공하는 형태로 사용.
2. 액티비티에 <androidx.~.~.ViewPager> 태그를 배치 + 아이디 부여
// activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.viewpager.widget.ViewPager
android:id="@+id/mainViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
3. 필요한 만큼 화면에 배치할 프래그먼트들을 제작하자.
4. 프래그먼트들을 ViewPager에서 위치에 맞게 뿌려주자. => Adapter 활용.
=> FragmentPagerAdapter를 상속받는 클래스를 만들어주자.
(부모클래스인 FragmentPagerAdapter도 기본생성자를 지원하지 않는다.)
=> 주 생성자에서 필요한 재료를 받아다 부모 클래스에게 전달하자.
class 어댑터이름(fm : FragmentManager) : FragmentPagerAdapter(fm)
필수 오버라이딩 함수 2개를 구현 (Alt + Enter => Implement... 선택)
1) getItem : 각각의 position에 맞는 Fragment가 어떤 Fragment인지 명시해주는 함수.
=> 각 상황별로 프래그먼트를 객체화해서 리턴처리.
2) getCount : 뷰페이저가 총 몇페이지를 표현하고싶은지 숫자로 리턴.
리스트뷰의 어댑터를 리스트뷰와 연결하던것처럼, 뷰페이저어댑터도 ViewPager와 연결해서 화면에 띄우자.
=> 어댑터의 생성자를 호출할때 그 재료로 supportFragmentManager를 집어넣자.
// MainViewPagerAdapter.kt
package com.eunjeong.viewpager.adapters
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import com.eunjeong.viewpager.fragments.FirstFragment
import com.eunjeong.viewpager.fragments.SecondFragment
import com.eunjeong.viewpager.fragments.ThirdFragment
class MainViewPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
override fun getCount(): Int {
return 3 // 몇장짜리인지
}
override fun getItem(position: Int): Fragment {
if (position == 0){
return FirstFragment()
}
else if (position == 1){
return SecondFragment()
}
else{
return ThirdFragment()
}
}
}
5. 마지막으로 MainActivity에서 Adapter 연결
package com.eunjeong.viewpager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.eunjeong.viewpager.adapters.MainViewPagerAdapter
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
lateinit var mViewPagerAdapter : MainViewPagerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mViewPagerAdapter = MainViewPagerAdapter(supportFragmentManager)
mainViewPager.adapter = mViewPagerAdapter
// 페이지가 많아지면 간단하게 부드럽도록 지원하는 기능
mainViewPager.offscreenPageLimit = 3
}
}
https://github.com/Eundding/android_study/tree/master/ViewPager
GitHub - Eundding/android_study
Contribute to Eundding/android_study development by creating an account on GitHub.
github.com
참고 : class101+ 코딩티처 지니 강의