티스토리 뷰

Mobile/Android

[Android] View Pager2

춘햄 2022. 3. 25. 08:41

View pager2는 손가락으로 좌우 스크롤하여 넘겨볼 수 있는 기능을 제공한다. 

 

(책에서는 View pager를 사용하지만, API 27 기준으로 deprecated됐기 때문에 View pager2를 사용하도록 하겠다)

 

내부에 프래그먼트를 삽입하면, 뷰페이져는 어뎁터라는 객체와 상호작용하여 이 어뎁터가 삽입한 프래그먼트 중 하나를 사용자에게 보여주는 방식이다.

 

바로 한번 코드를 확인해보자.


◎activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" android:orientation="vertical">
    <Button
            android:text="Button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" android:id="@+id/button"/>
    <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
</LinearLayout>

우선 메인 액티비티에 ViewPager2를 위와 같이 추가한다.

 

이MainActivity.java 클래스에서는 FragmentStateAdapter 클래스를 상속받는 내부 클래스를 하나 생성하고, 그 생성자 메서드는 FragmentActivity를 받도록 작성한다. 

 

이후에 Fragment Array를 하나 생성하고 배열을 제어할 메서드 몇 개를 생성하여  onCreate 에 FragmentStateAdapter를 호출하도록 구성한다.

 

◎MainActivity.java

package com.example.singlepager;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ViewPager2 pager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pager = findViewById(R.id.pager);
        pager.setOffscreenPageLimit(3);

        MyPagerAdapter adapter = new MyPagerAdapter(this);

        Fragment1 fragment1 = new Fragment1();
        adapter.addItem(fragment1);

        Fragment2 fragment2 = new Fragment2();
        adapter.addItem(fragment2);

        Fragment3 fragment3 = new Fragment3();
        adapter.addItem(fragment3);

        pager.setAdapter(adapter);
    }

    @Override
    public void onBackPressed() {
        if (pager.getCurrentItem() == 0) {
            super.onBackPressed();
        } else {
            pager.setCurrentItem(pager.getCurrentItem() - 1);
        }
    }

    class MyPagerAdapter extends FragmentStateAdapter {
        ArrayList<Fragment> items = new ArrayList<Fragment>();

        public MyPagerAdapter(FragmentActivity fa) {
            super(fa);
        }

        @NonNull
        @Override
        public Fragment createFragment(int position) {
            return getItem(position);
        }

        public void addItem(Fragment item) {
            items.add(item);
        }

        public Fragment getItem(int position) {
            return items.get(position);
        }

        @Override
        public int getItemCount() {
            return items.size();
        }
    }
}


 

반응형

'Mobile > Android' 카테고리의 다른 글

[Android] ViewModel  (0) 2022.03.27
[Android] Navigation Drawer  (0) 2022.03.27
[Android] Tab 2: 하단 Tab 구성  (0) 2022.03.24
[Android] Tab 1: Tab 이해하기, 상단 Tab 구성  (0) 2022.03.24
[Android] Action Bar 2: 액션바에 View 삽입  (0) 2022.03.23
Comments