본문 바로가기

안드로이드

ViewPager2로 여러 프래그먼트 간 슬라이드

반응형
https://developer.android.com/training/animation/screen-slide?hl=ko
뷰페이저

https://developer.android.com/training/animation/screen-slide-2?hl=ko
뷰페이저2

https://developer.android.com/training/animation/vp2-migration?hl=ko
뷰페이저에서 뷰페이저2로 이전

 

뷰페이저는 손가락으로 좌우 스크롤하여 넘겨볼 수 있는 기능을 제공한다

뷰페이저 객체는 객체는 화면 슬라이드에 자동으로 애니메이션을 적용할 수 있다

 

이전의 fragment1.xml, fragment2.xml, fragment3.xml과 Fragment1, Fragment2, Fragment3 자바 파일들을 복사해온다

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

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


</LinearLayout>

 

MainActivity

package com.example.a35_viewpager;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;

import android.os.Bundle;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ViewPager2 viewPager2;

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

        viewPager2 = findViewById(R.id.pager);
        FragmentSlidePagerAdapter fragmentSlideAdapter = new FragmentSlidePagerAdapter(this);

        Fragment1 fragment1 = new Fragment1();
        Fragment2 fragment2 = new Fragment2();
        Fragment3 fragment3 = new Fragment3();

        fragmentSlideAdapter.addFragmentItem(fragment1);
        fragmentSlideAdapter.addFragmentItem(fragment2);
        fragmentSlideAdapter.addFragmentItem(fragment3);

        viewPager2.setAdapter(fragmentSlideAdapter);
    }

    //    기존 ViewPager의 FragmentStatePagerAdapter 클래스는 폐기되었다
    private class FragmentSlidePagerAdapter extends FragmentStateAdapter {

        ArrayList<Fragment> fragmentItems = new ArrayList<Fragment>();

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

        public void addFragmentItem(Fragment fragmentItem) {
            fragmentItems.add(fragmentItem);
        }

//        지정된 위치와 연괸돤 새 프래그먼트를 보여주도록 한다
        @Override
        public Fragment createFragment(int position) {
            return fragmentItems.get(position);
        }

//        어댑터에서 만들 페이지 수를 반환한다
        @Override
        public int getItemCount() {
            return fragmentItems.size();
        }
    }

}

 

 

 

 

버튼을 하나 추가하고, 버튼 클릭 시 2번째 프래그먼트로 이동하게 하려면 setCurrentItem 메소드를 쓰면 된다

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="두 번째로 이동" />

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


</LinearLayout>

 

MainActivity

package com.example.a35_viewpager;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ViewPager2 viewPager2;
    Button button;

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

        viewPager2 = findViewById(R.id.pager);
        FragmentSlidePagerAdapter fragmentSlideAdapter = new FragmentSlidePagerAdapter(this);

        Fragment1 fragment1 = new Fragment1();
        Fragment2 fragment2 = new Fragment2();
        Fragment3 fragment3 = new Fragment3();

        fragmentSlideAdapter.addFragmentItem(fragment1);
        fragmentSlideAdapter.addFragmentItem(fragment2);
        fragmentSlideAdapter.addFragmentItem(fragment3);

        viewPager2.setAdapter(fragmentSlideAdapter);
        
//        버튼 클릭시 2번째 프래그먼트로 이동
        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewPager2.setCurrentItem(1);
            }
        });
    }

    //    기존 ViewPager의 FragmentStatePagerAdapter 클래스는 폐기되었다
    private class FragmentSlidePagerAdapter extends FragmentStateAdapter {

        ArrayList<Fragment> fragmentItems = new ArrayList<Fragment>();

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

        public void addFragmentItem(Fragment fragmentItem) {
            fragmentItems.add(fragmentItem);
        }

        //        지정된 위치와 연괸돤 새 프래그먼트를 보여주도록 한다
        @Override
        public Fragment createFragment(int position) {
            return fragmentItems.get(position);
        }

        //        어댑터에서 만들 페이지 수를 반환한다
        @Override
        public int getItemCount() {
            return fragmentItems.size();
        }


    }

}

 

반응형

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

서비스  (0) 2021.10.22
바로가기 메뉴, Navigation Drawer  (0) 2021.10.21
하단 탭 만들기  (0) 2021.10.20
상단 탭 만들기  (0) 2021.10.20
[에러] Installation failed due to: ''cmd package install-create ....  (0) 2021.10.20