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