← 글 목록
0%

ViewPager2 주요 변경점 살펴보기

2011년에 출시된 ViewPager의 후속 버전인 ViewPager2가 2019년 알파 버전으로 공개되었다. RecyclerView 기반 어댑터, 세로 방향 페이징과 RTL 지원 등 주요 변경점을 살펴본다.

ViewPager는 널리 사용되었지만 Fragment 중심의 어댑터 구조, RTL과 세로 방향 페이징 지원 등에서 아쉬움이 있었다. ViewPager2는 이런 요구를 반영해 구조와 기능을 개선했다.


이제 다음 기능을 공식적으로 지원한다.

ViewPager2

프로젝트는 AndroidX로 구성하고 minSdkVersion 14이상을 지원해야 합니다. build.gradle에 아래 라이브러리를 추가합니다.

implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha01'


RecyclerView에 익숙하다면 ViewPager2를 구성하는것은 매우 익숙합니다. RecyclerView.Adapter를 상속받아 어댑터를 생성합니다. 물론 ViewHolder도 필요합니다.

class AppPagerAdapter(private val apps: Array<String>) : RecyclerView.Adapter<AppViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AppViewHolder {
        return AppViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.app_pager_item, parent, false))
    }

    override fun onBindViewHolder(holder: AppViewHolder, position: Int) {
        holder.txtApp.text = apps[position]
    }

    override fun getItemCount() = apps.size
}

class AppViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    val txtApp: TextView = view.findViewById(R.id.txt_app)
}


마지막으로 RecyclerView와 마찬가지로 ViewPager2의 Adapter를 설정한다. LayoutManager를 직접 지정할 필요는 없으며, ORIENTATION_VERTICAL로 세로 방향 페이징을 설정할 수 있다.

ViewPager2.orientation = ViewPager2.RIENTATION_VERTICAL


ViewPager2는 아직 알파 버전인 단계로 버그나 문제점은 보여집니다. 하지만 ViewPager의 View 재사용성 문제를 RecyclerView의 ViewHolder패턴을 그대로 사용하면서 해결함과 동시에 RecyclerView에 익숙한 개발자들에게 별도의 학습없이 적용할 수 있게 솔루션을 제공하였습니다. 또한 orientation기능 도입으로 가로 스크롤뿐만 세로스크롤도 지원하게 되었습니다. 또한 RTL도 지원합니다!

추가 기능외 전 버전의 notifyDataSetChanged()가 실행되지 않는 문제를 해결하였습니다. getItemPosition에서 POSITION_NONE을 강제로 반환하도록 하여 문제를 회피했던 경험 모두 있으실것 같은데 이제 해결되었습니다.


알려진 버그 (1.0.0 알파 01기준)

-ClipToPadding 미지원
-TabLayout 미지원
-pageWidth 미지원(강제 가로/세로 100%)
-currentItem 설정시 이전 페이지 보이는 현상

X 공유