뷰페이저2 - 스와이프로 넘기는 화면
- 스와이프 동작을 사용하여 화면을 넘길 수 있도록 만든다.
- 2019년 이후로 viewpager와 별개로 viewpager2 라이브러리가 제공된다.
dependencies{
...
implementation 'androidx.viewpager2:viewpager2:1.0.0'
}
- 뷰페이저2는 화면을 하나의 항목으로 보기 때문에 어댑터를 적용해야한다.
- RecyclerView.Adapter
- FragmentStateAdapter ( 주로 사용 )
리사이클러 뷰 어탭터 적용
<?xml version="1.0" encoding="utf-8"?>
<androidx.viewpager2.widget.ViewPager2 xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewpager">
</androidx.viewpager2.widget.ViewPager2>
class MyPagerViewHolder(val binding: ItemPagerBinding): RecyclerView.ViewHolder(binding.root)
class MyPagerAdapter(val datas:MutableList<String>): RecyclerView.Adapter<RecyclerView.ViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return MyPagerViewHolder(ItemPagerBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val binding = (holder as MyPagerViewHolder).binding
binding.pagerData.text = datas[position]
when(position % 3){
0 -> binding.pagerData.setBackgroundColor(Color.RED)
1 -> binding.pagerData.setBackgroundColor(Color.BLUE)
2 -> binding.pagerData.setBackgroundColor(Color.GREEN)
}
}
override fun getItemCount(): Int {
return datas.size
}
}
binding.viewpager.adapter = MyPagerAdapter(datas)
프래그먼트 어댑터 이용
class MyFragmentPagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity){
val fragments: List<Fragment>
init {
fragments = listOf(OneFragment(), TwoFragment(), ThreeFragment())
Log.d("lumineko", "fragments size: ${fragments.size}")
}
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
binding.viewpager.adapter = MyFragmentPagerAdapter(this)
binding.viewpager.orientation = ViewPager2.ORIENTATION_VERTICAL