ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ViewPager2
    Android 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
Designed by Tistory.