Archives
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[41일차 Android] ViewPager2 본문

Computer/Android

[41일차 Android] ViewPager2

Wise-99 2023. 7. 1. 22:02

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 ViewPager2

  • ViewPager를 개선하여 나온 View로 RecyclerView를 상속받는 View이다.
  • 이에 사라지는 화면을 메모리에서 제거하는 것이 아닌 가지고 있다가 재사용하기 때문에 메모리를 효율적으로 사용할 수 있다.
  • 슬라이드 방향을 다양하게 제공하고 있다.

 

 

 

예제 코드

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

    // 사용할 Fragment들
    val fragment1 = Sub1Fragment()
    val fragment2 = Sub2Fragment()
    val fragment3 = Sub3Fragment()
    val fragment4 = Sub4Fragment()
    val fragment5 = Sub5Fragment()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        activityMainBinding.run{
            pager2.run{
                adapter = MainFragmentStateAdapter(this@MainActivity)

                // 스크롤 방향을 오른쪽 -> 왼쪽으로 설정
                // layoutDirection = ViewPager2.LAYOUT_DIRECTION_RTL

                // 스크롤 방향을 위 -> 아래로 설정
                orientation = ViewPager2.ORIENTATION_VERTICAL

                // 페이지가 변경될 때
                // 고차 함수가 지원되지 않음
                registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
                    // position : 현재 보여진 페이지의 번호
                    override fun onPageSelected(position: Int) {
                        super.onPageSelected(position)
                        textViewMain.text = "page selected : $position"
                    }
                })
            }
        }
    }

    // ViewPager2의 Adapter
    inner class MainFragmentStateAdapter(framgnetActivity:FragmentActivity) : FragmentStateAdapter(framgnetActivity){
        // 보여줄 페이지 수
        override fun getItemCount(): Int {
            return 5
        }

        // position번째 Fragment를 반환하여 보여준다.
        override fun createFragment(position: Int): Fragment {
            val resultFragment = when(position){
                0 -> fragment1
                1 -> fragment2
                2 -> fragment3
                3 -> fragment4
                4 -> fragment5
                // else는 임의 지정
                else -> fragment4
            }
            return resultFragment
        }
    }
}

 

 

 

결과

기본(layoutDirection 미설정) LAYOUT_DIRECTION_RTL ORIENTATION_VERTICAL