-
ViewPager2Android 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
'Android' 카테고리의 다른 글
Replace findViewById with View Binding (0) 2021.08.06 ANR(Application Not Responding) (0) 2021.07.19 Tests App on Android(2) - Robolectric (0) 2021.07.01 Tests App on Android(1) (0) 2021.06.28 Room Database (0) 2021.06.14