티스토리 뷰
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
최근에 올라온 글
최근에 달린 댓글
TAG
- react-native
- 인천 구월동 이탈리안 맛집
- Async
- 맛집
- redux-thunk
- 파니노구스토
- 정보보안기사 #실기 #정리
- AsyncStorage
- 이탈리안 레스토랑
- await
- javascript
- 인천 구월동 맛집
- redux
- Promise
- react
- Total
- Today
- Yesterday