안드로이드 개발자의 창고
[41일차 Android] ViewPager2 본문
출처 : 안드로이드 앱스쿨 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 |
![]() |
![]() |
![]() |
'Computer > Android' 카테고리의 다른 글
[41일차 Android] TabLayout(ViewPager2과 TabLayout 연동) (0) | 2023.07.04 |
---|---|
[41일차 Android] AppBarLayout (0) | 2023.07.01 |
[41일차 Android] Fragment에서의 ToolBar 사용 (0) | 2023.07.01 |
[41일차 Android] ToolBar (0) | 2023.07.01 |
[41일차 Android] ActionBar Navigation (0) | 2023.07.01 |