11-5 뷰 페이저2

StrayCat·2022년 11월 13일
0

뷰페이저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 // 세로 스크롤일 경우

0개의 댓글