ViewPager是頁面區塊內容的切換,可以用滑動的方式來切換裡面的內容。這邊直接以Fragment當作內容物實作ViewPager2。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
將FragmentViewPagerAdapter繼承FragmentStateAdapter
package com.example.viewpager_demo;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
public class FragmentViewPagerAdapter extends FragmentStateAdapter {
//初始化
public FragmentViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
@NonNull
@Override
public Fragment createFragment(int position) {
if (position == 0){
return new FragmentA();
}
else if (position == 1){
return new FragmentB();
}
else {
return new FragmentC();
}
}
@Override
public int getItemCount() {
return 3;
}
}
提供Fragment創建與放置在自己該在的位置而position就是它們的位置。
但ViewPager也不是一開始就全部的Fragment都加載出來,當第一屏和第二屏時,會展示第一屏,預加載第二屏,滑動到第二屏的時候,會預加載第三屏而第一屏因為有可能從第二屏滑動回第一屏,所以不會銷毀,而滑動到第三屏,就會銷毀第一屏,第二屏不會銷毀,同理第四屏也是這樣,也就是說ViewPager有一個原則,只要是在我顯示內容的左右兩側,都會預先創建出來以方便之後的切換而其餘的內容就會被銷毀。
頁面內容數量
package com.example.viewpager_demo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager;
private FragmentViewPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewpager);
//創建一個adapter
adapter = new FragmentViewPagerAdapter(this);
//將adapter放入ViewPager
viewPager.setAdapter(adapter);
//指定一開始ViewPager顯示內容位置
viewPager.setCurrentItem(0);
}
}