1. 정의
ViewPager는 안드로이드에서 제공하는 위젯 중 하나로, 여러 개의 뷰를 좌우로 슬라이딩하며 화면에 표시할 수 있도록 하는 기능을 제공한다.
탭 메뉴나 이미지 슬라이더 등 다양한 용도로 사용되며, 여러 개의 뷰를 일정한 간격으로 배치하여 스크롤 가능한 화면을 구성할 수 있다.
언뜻 보면 recyclerView랑 비슷해 보이지만, 뷰페이저를 이용한 것은 일정 부분 화면이 넘어가면 화면이 전환되는 특징을 가지고 있다.
2. 활용 방법
2-1. xml 파트
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2-2. main에 들어가야할 파트
// ViewPager 객체 생성
val viewPager = findViewById<ViewPager>(R.id.viewPager)
// PagerAdapter 객체 생성
val pagerAdapter = MyPagerAdapter(supportFragmentManager)
// ViewPager에 어댑터 설정
viewPager.adapter = pagerAdapter
// 현재 위치 지정
viewPager.currentItem = 0
2-3. Adapter 구현
class MyPagerAdapter(fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) {
companion object {
private const val PAGE_COUNT = 3
}
override fun getCount(): Int {
return PAGE_COUNT
}
override fun getItem(position: Int): Fragment {
return MyFragment.newInstance(position)
}
override fun isViewFromObject(view: View, obj: Any): Boolean {
return view == (obj as Fragment).view
}
override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
container.removeView(obj as View)
}
}
getCount 메서드는 ViewPager에 표시할 뷰의 개수를 반환하고, getItem 메서드는 지정된 위치에 해당하는 뷰를 생성한다.
isViewFromObject 메서드는 뷰와 객체가 연결되어 있는지를 확인하고, destroyItem 메서드는 뷰를 제거한다.
2-4. Fragment 구현
class MyFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.fragment_my, container, false)
return rootView
}
companion object {
fun newInstance(position: Int): MyFragment {
val fragment = MyFragment()
val args = Bundle()
args.putInt("position", position)
fragment.arguments = args
return fragment
}
}
}
onCreateView 메서드는 Fragment가 화면에 표시될 때 호출되는 메서드로, 뷰를 생성하여 반환한다.
MyFragment는 Fragment를 상속하며, newInstance 메서드를 사용하여 Fragment 인스턴스를 생성한다.
위치 인자를 받아 Fragment를 생성하고, 인자를 Bundle 객체에 저장하여 Fragment에 전달한다.
이 과정을 통하면 ViewPager에서 각 Fragment의 위치를 구분할 수 있게 된다.
참고로 Bundle은 안드로이드에서 데이터를 전달하는 데 사용되는 객체를 말한다.
키 - 값의 쌍으로 데이터를 저장하고 전달할 수 있으며, 주로 Intent나 Fragment 등의 안드로이드 컴포넌트에서 전달되는 데이터를 저장할 때 주로 사용된다.
3. 추가적으로 참고할만한 사이트
ViewPager2로 프래그먼트 간 슬라이드 | Android 개발자 | Android Developers
ViewPager2로 프래그먼트 간 슬라이드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 화면 슬라이드는 하나의 전체 화면에서 다른 전체 화면으로 전환하는 것
developer.android.com
[안드로이드] 리사이클러뷰 android:clipToPadding="false"
리사이클러뷰에 패딩을 줄 경우 위아래에 패딩공간이 있을 것이다. 그런데 사람마다 다르겠지만 스크롤을 한 경우 패딩공간을 활용하면 좀더 뷰를 활용할수있고 자연스러운(?) 뷰를 보여줄 수
youngest-programming.tistory.com
안드로이드 View의 clipChildren에 대하여 - Hansol’s Blog
기본적으로 안드로이드의 모든 view는 자신이 물리적으로 차지하는 영역 만큼만 그릴 수 있다. 즉, 전체 화면을 기준으로 (left=100, top=100, right=200, bottom=200)만한 영역을 차지하는 view가 (left=200, top=2
giantsol.github.io
'Kotlin > 개념 정리' 카테고리의 다른 글
| 개념 정리 : 데이터 바인딩 (0) | 2023.02.17 |
|---|---|
| 개념 정리 : 뷰 바인딩 (0) | 2023.02.17 |
| 개념 정리 : 코루틴 (0) | 2023.02.17 |
| 개념 정리 : 콜백 함수(Callback Function) (0) | 2023.02.16 |
| 개념 정리 : 안드로이드 Activity 생명 주기 (Activity Life Cycle) (0) | 2023.02.15 |