반응형
    
    
    
  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 |