본문 바로가기
개발/안드로이드 어플

⑤안드로이드어플개발 - viewPager

by 외노자개발 2022. 11. 28.
반응형

ViewPager


Fragment를 페이지로 전환 등을 할 수있는 뷰.
ListView와 마찬가지로 ViewPager는 Adapter와 함께 사용해야합니다.

 

이 뷰를 상속한 뷰를 사용하면 화면을 스와이프하여 페이지 전환이나 Tab을 전환할 수도 있습니다.

상단의 탭을 클릭, 스와이프 이동할 수 있다.

파일 이름설명

파일이름 설명
MainActivity.java
activity_main.xml
ViewPager 뷰와 버튼을 보관 유지하는 화면의 레이아웃과 그 Activity
FragMonday.java
fragment_tuesday.xml
1 페이지째의 레이아웃과 그 Fragment(monday의 페이지)
FragTuesday.java
fragment_monday.xml
2페이지째의 레이아웃과 그 Fragment(tuesday의 페이지)
FragWednesday.java
fragment_wednesday.xml
3페이지째의 레이아웃과 그 Fragment(wednesday의 페이지)
ViewPagerAdapter.java 스 와이프 할 때 Fragment를 생성하는 Adapter

 

frag_monday.xml

<TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Seo Android1"
        android:textColor="#0B0A0A"
        android:textSize="34sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

 

FragMonday.java

public class FragMonday extends Fragment {
    private View view;

    public static FragMonday newInstance() {
        FragMonday fragMonday = new FragMonday();
        return fragMonday;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.frag_monday, container, false);

        return view;
    }
}

 

 

Adapter에 대해 자세히 알아보기


Adapter는 2종류 있다. "FragmentPagerAdapter"와 "FragmentStatePagerAdapter".
각각 동작이 다르기 때문에, 작성하는 어플에 맞추어 선택할 필요가 있다.
페이지가 전환되었을 때, 「FragmentPagerAdapter」는 표시한 Fragment를 메모리상에 유지한다.
"FragmentStatePagerAdapter"는 페이지가 전환될 때 Fragment를 파기한다.
이번에는 페이지 수가 적기 때문에 "FragmentPagerAdapter"를 사용했다.

 

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter {
    public ViewPagerAdapter(@NonNull FragmentManager fm) {
        super(fm);
    }

    //Fragment 를 보여주는 처리를 구현한 곳 입니다.
    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return FragMonday.newInstance();
            case 1:
                return FragTuesday.newInstance();
            case 2:
                return FragWednesday.newInstance();
            default:
                return null;
        }

    }

    @Override
    public int getCount() {
        return 3;
    }

    // 상단의 탭 레이아웃 인디케이터 쪽에 텍스트를 선언해주는 곳
    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Monday";
            case 1:
                return "Tuesday";
            case 2:
                return "Wednesday";
            default:
                return null;
        }
    }
}

 

 

 

Java 소스 코드


public class MainActivity extends AppCompatActivity {

    private FragmentPagerAdapter fragmentPagerAdapter;

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

        //뷰페이저 세팅
        ViewPager viewPager = findViewById(R.id.viewPager);
        fragmentPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

        TabLayout tabLayout = findViewById(R.id.tab_layout);
        viewPager.setAdapter(fragmentPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
    }
}
반응형

댓글