반응형
Overview
- ViewPager2를 활용하여 프래그먼트의 화면 이동을 손가락으로 옆으로 밀어서(슬라이드) 전환하는 것을 목표로합니다.
- 총 3개의 뷰페이지, 2개의 프래그먼트를 이용하여 슬라이드를 통한 화면전한 예시
ViewPager2 사용을 위한 설정
build.gradle (Module)
- dependencies에 viewpager2 라이브러리 추가
dependencies {
...
// ViewPager2
implementation "androidx.viewpager2:viewpager2:1.1.0-beta01"
...
}
UI 디자인
activity_main.xml (MainActivity)
- 디자인 화면
- xml 코드
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
fragment_first.xml (FirstFragment)
- 디자인 화면
- xml 소스
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstFragment">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:text="Frag1"
android:textSize="60sp" />
</FrameLayout>
fragment_second.xml (SecondFragment)
- 디자인 화면
- xml 코드
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondFragment">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:text="Frag2"
android:textSize="60sp" />
</FrameLayout>
구현 (코딩)
MainActivity
- 뷰페이저2를 보여주고 슬라이드 할 메인 화면
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;
public class MainActivity extends AppCompatActivity {
// 뷰페이저2 인스턴스
private ViewPager2 viewPager2;
// 뷰페이저2를 보여줄 어댑터
private ViewPager2Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 뷰페이저2 어댑터 설정
viewPager2 = findViewById(R.id.viewPager2);
adapter = new ViewPager2Adapter(this); // 어댑터 생성
viewPager2.setAdapter(adapter);
}
}
ViewPaer2Adapter
- 뷰페이저2의 내용을 보여줄 어댑터
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;
public class ViewPager2Adapter extends FragmentStateAdapter {
// 뷰페이저에 보여줄 페이지 개수 설정
private static final int NUM_PAGES = 3;
// 프래그먼트로 구성된 어댑터일 경우 MainActivity가 아닌 Fragment로 초기화하여야 함
public ViewPager2Adapter(@NonNull MainActivity mainActivity) {
super(mainActivity);
}
@NonNull
@Override
public Fragment createFragment(int position) {
// 반환할 프래그먼트 인스턴스 생성 및 초기화
Fragment fragment = new FirstFragment();
// 해당 위치(position)에 따라 프래그먼트 반환
if (position == 0) // 첫번째 위치일 경우 FirstFragment 화면 반환
fragment = new FirstFragment();
else if (position ==1) // 첫번째 위치일 경우 FirstFragment 화면 반환
fragment = new SecondFragment();
// 위치에 따른 프래그먼트 반환
return fragment;
}
@Override
public int getItemCount() {
return NUM_PAGES; // 전체 아이템 수 반환
}
}
FirstFragment / SecondFragment
- 뷰페이지2에서 각각의 화면을 보여줄 프래그먼트
- 추가 코드 없음
응용편에서는...
- 뷰페이지2의 화면이 이동될 때 현재 페이지가 어떤 화면인지를 표시해주는 BottomNavigationBar를 간단하게 구현합니다.
- BottomNavigationBar를 클릭 할 경우, 뷰페이저2 내에서 선택한 특정 화면으로 이동하는 것을 구현합니다.
Android(Java) - (2/2) ViewPager2를 이용하여 슬라이드로 프래그먼트 화면 전환하기 응용편
참고
Android developers - 가이드 - ViewPager2를 사용하여 탭으로 스와이프 뷰 만들기
반응형