개발/안드로이드

[Android] ViewPager2, Fragment

도넛의용기 2023. 3. 16. 03:34

(개발중에 쓸일이 있어서 썼다가 간단히 메모하고 싶어서 올리는 글... 코드 대충 손보고 쓰는거라 오류 있을 수 있음)

 

목차

 1. 개요

 2. 뷰페이저

 3. 사용법

 

 

1. 개요

https://developer.android.com/jetpack/androidx/releases/viewpager2?hl=ko#androidx-deps 

 

ViewPager2  |  Android 개발자  |  Android Developers

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 스와이프할 수 있는 형식으로 뷰 또는 프래그먼트를 표시합니다. 최근 업데이트 공개 버전 출시 후보 베타

developer.android.com

 뷰페이저는 리스트뷰나 리사이클러뷰와는 달리 리스트로 항목들을 보여주는 것이 아닌 페이지단위로 항목들을 보여줍니다. 이를 이용해서 우리는 스와이프를 통해 항목 하나하나 보여주는 뷰를 구성할 수 있습니다

https://developer.android.com/guide/navigation/navigation-swipe-view-2?hl=ko 

 

ViewPager2를 사용하여 탭으로 스와이프 뷰 만들기  |  Android 개발자  |  Android Developers

ViewPager2를 사용하여 탭으로 스와이프 뷰 만들기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 스와이프 뷰를 사용하면 손가락의 가로 동작이나 스와이프

developer.android.com

뷰페이저2는 기존의 뷰페이저를 대체하고 더 확장된 기능들을 제공하고 업데이트도 계속 되고 있으니 뷰페이저보다 뷰페이저2를 이용하는게 좋겠습니다.

 

이 문서에서는 편의상 뷰페이저2를 그냥 뷰페이저라고 하겠습니다.

 

2. 뷰페이저

 

뷰페이저는 리사이클러 뷰와 비슷하게, 액티비티 레이아웃에 뷰페이저 뷰를 생성하고, 그곳에 다른 뷰를 넣어 이용하는 방식으로 많이 이용됩니다. 

 

뷰페이저는 플래그먼트와 같이 이용되기도 하고 플래그먼트 없이 이용되기도 합니다.

여기서는 플래그먼트와 이용하는 것에 대해서 이야기 해보겠습니다.

 

3. 사용법

플래그먼트를 뷰페이저를 이용하여 액티비티에 띄워주는 간단한 어플리케이션을 만들어 보도록 하겠습니다.

 

우선 기본적으로 크게 다음과 같은 흐름으로 이어집니다.

    1. 플래그먼트 생성

    2. 액티비티에 뷰페이저 생성 

    3. 어댑터 생성

    4. 액티비티에서 플래그먼트 생성 후 어댑터로  넣어주기

 

1) 플래그먼트 생성

class StoryFragment() : Fragment() { 

	//레이아웃은 생략했습니다.
    lateinit var binding: FragmentViewBinding
    
    // 플래그먼트뷰를 생성하는 함수입니다.
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = StoryFragmentBinding.inflate(inflater, container, false)
        // 리턴값으로 뷰바인딩에서 root를 리턴합니다.
        return binding.root
    } 

    // 생성된 플래그먼트를 이곳에서 조작할 수 있습니다.
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
		// fragment_view 레이아웃의 텍스트뷰에 문자열을 입력했습니다.
        binding.fragmentText.setText("text")
    }
}

 

2)  액티비티 레이아웃에 뷰페이저를 추가해줍니다.

<androidx.viewpager2.widget.ViewPager2
	android:id="@+id/Fragment"
	android:layout_width="match_parent"
	android:layout_height="match_parent"/>

3) 어댑터를 추가해줍니다

class StoryFragmentAdapter(activity: MainActivity) : FragmentStateAdapter(activity) {

    private val fragments = mutableListOf<Fragment>()

    fun addFragment(fragment: Fragment) {
        fragments.add(fragment)
    }

    override fun getItemCount(): Int = fragments.size

    override fun createFragment(position: Int): Fragment = fragments[position]
}

4) 어댑터로 플래그먼트를 삽입합니다.

class MainActivity : AppCompatActivity() {
    private lateinit var viewPager: ViewPager2
    
    override fun onCreate(savedInstanceState: Bundle?) {
    	val binding = ActivityMainBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        
        // 어댑터 생성
        val adapter = FragmentAdapter(this)

        // 플래그먼트를 만들고 추가
        val fragment = Fragment() 
        adapter.addFragment(fragment)

        // 플래그먼트 삽입
        binding.Fragment.adapter = adapter
    }

}

'개발 > 안드로이드' 카테고리의 다른 글

[Android] Utility  (0) 2023.05.30
[Android] Android Weekly  (0) 2023.05.28
[Android] 모듈화로 빌드시간을 줄인다?  (2) 2023.05.28
[Android] 앱 시작 Activity 변경  (0) 2023.03.19
[Android] Intent (인텐트)  (0) 2023.02.19