Android

ViewPager2

smomo 2021. 7. 10. 14:55

ViewPager2 새로운 기능

  • 세로 방향 페이징 지원 

  - android:orientation="vertical" 속성을 설정, 혹은 setOrientation() 메서드를 사용하여 세로 페이징을 설정할 수 있다.

  • 오른쪽에서 왼쪽 지원

  - android:layoutDirection="rtl" 속성을 설정, 혹은 setLayoutDirection() 메서드를 사용하여 설정할 수 있다.

  - RTL페이징은 언어에 따라 해당하는 경우 자동으로 설정

  • 수정 가능한 프래그먼트 컬렉션 

  - 기본 컬렉션이 변경되면 notifyDatasetChanged()를 호출하여 UI를 업데이트한다.

  • DiffUtil Class 엑세스 가능

  - RecyclerView를 기반으로 빌드되므로 DiffUtil 유틸리티 클래스 엑세스 가능하다.

 

 

참고: 앱에서 이미 ViewPager를 사용하고 있다면 ViewPager에서 ViewPager2로 이전을 참고하자.

설정

build.gradle 파일에 다음 dependencies를 추가

dependencies {
   implementation 'androidx.viewpager2:viewpager2:1.0.0'
}

사용법

페이지를 View로 구현할 경우 RecyclerView.Adapter를, Fragment로 구현할 경우는 FragmentStateAdapter를 사용한다.

 

RecyclerView.Adapter

class ViewpagerAdapter(private val bgColors:List<Int>):RecyclerView.Adapter<ViewpagerHolder>(){
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewpagerHolder =
                ViewpagerHolder(LayoutInflater.from(parent.context)
                        .inflate(R.layout.pager_item, parent, false))

        override fun onBindViewHolder(holder: ViewpagerHolder, position: Int) {
                holder.bind(bgColors[position], position)
        }

        override fun getItemCount(): Int = bgColors.size
}

class ViewpagerHolder (private val item: View):RecyclerView.ViewHolder(item){
        private val textView = item.findViewById<TextView>(R.id.page_name)
        fun bind(bgColor:Int, position:Int){
			...
        }
}

FragmentStateAdapter

private class ScreenSlidePagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
	override fun getItemCount(): Int = NUM_PAGES
    
	override fun createFragment(position: Int): Fragment = ScreenSlidePageFragment()
}

Adapter 인스턴스를 Viewpager2 객체에 연결

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.rxbinding_activity)
        viewpager = findViewById(R.id.view_pager)
        viewpager.adapter = ViewpagerAdapter(bgColors)
        ....
    }

 

 

References