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