본문 바로가기
Android

[깡쌤의 안드로이드 프로그래밍 with 자바 - 2022 - 쌤즈] 정리 17 - ViewPager2

by 들풀민들레 2022. 5. 9.

책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.

 

본 글은 [깡쌤의 안드로이드 프로그래밍 with 자바 - 2022 - 쌤즈] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책 혹은 인강(www.ssamz.com)을 통해 확인해 주세요.

 

8.5. ViewPager2


스마트폰의 앱을 보면 사용자 손가락을 따라가며 순서대로 좌우 화면이 슬라이드되어 나타나는 구성이 빈번합니다. 안드로이드에서 이 부분을 개발하려면 ViewPager2 클래스를 이용합니다.

 


ViewPager는 androidx 라이브러리로 제공되며 2종류로 나뉩니다.
오랫동안 이용되었던 ViewPager와 2019년부터 제공되기 시작한 ViewPager2입니다. ViewPager2 라이브러리가 ViewPager보다 기능이 더 다양하므로, 이곳에서는 ViewPager2를 사용해보겠습니다.

 

 

ViewPager를 이용하기 위해 레이아웃 XML 파일에 등록합니다.

 

<androidx.viewpager2.widget.ViewPager2
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

ViewPager2를 구현할 때 중요한 부분은 ViewPager2도 AdapterView라는 점입니다.
RecyclerView와 마찬가지로 항목을 나열하기 위한 뷰입니다. 단, ViewPager2는 하나의 화면을
항목 하나로 보며 추가한 순서대로 사용자 제어에 따라 좌우로 화면이 바뀌는 뷰입니다. 결국,
AdapterView의 일종이므로 Adapter를 만들어 적용해야지만 화면에 내용이 나옵니다.

 

페이스북 앱을 예로 들면 Adapter를 이용해서 항목(화면)을 6개 추가한 경우입니다. 이렇게 추가된
항목은 사용자의 제어에 따라 ViewPager2 영역에 출력됩니다. 결국, Adapter를 어떻게 만드냐가
중요한 부분입니다.


ViewPagere2에 사용할 수 있는 Adapter는 2가지입니다. RecyclerView에서 살펴보았던
RecyclerView.Adapter를 이용할 수도 있고, FragmentStateAdapter를 이용할 수도 있습니다.
RecyclerView.Adapter를 사용하는 방법은 RecyclerView와 같습니다. RecyclerView.Adapter에
의해 만들어지는 항목을 ViewPager2에 적용하면 하나의 화면으로 출력된다는 차이만 있습니다.


ViewPager2에 의해 전환되는 각각의 화면이 간단하다면 RecyclerView.Adapter를 이용해도 되지만
대부분 복잡합니다. 그러므로 Fragment를 사용하며, 이 Fragment를 항목으로 구성하는 Adapter가
바로 FragmentStateAdapter입니다.

 

public class MyAdapter extends FragmentStateAdapter {
	List<Fragment> fragments;
	MyAdapter(FragmentActivity activity){
		super(activity);
		fragments = new ArrayList<>();
		fragments.add(new RedFragment());
		fragments.add(new GreenFragment());
		fragments.add(new BlueFragment());
	}
	@Override
	public int getItemCount() {
		return fragments.size();
	}
	@NonNull
	@Override
	public Fragment createFragment(int position) {
		return fragments.get(position);
	}
}

FragmentStateAdapter를 상속받아 Adapter를 작성하며, getItemCount ( ) 함수와
createFragment () 함수를 오버라이드합니다. getItemCount () 함수는 항목의 개수를 판단하기 위해
자동으로 호출되며, createFragment () 함수는 항목을 구성하는 Fragment 객체를 획득하기 위해서

자동 호출됩니다.


이렇게 만들어진 Adapter를 ViewPager2 객체에 적용하면 Adapter에 의해 만들어진 항목이 각각의
화면에 나오게 됩니다.

 

binding.viewpager.setAdapter(new MyAdapter(this));

 

책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.