1 package com.google.phonenumbers.demoapp.result; 2 3 import androidx.annotation.NonNull; 4 import androidx.fragment.app.Fragment; 5 import androidx.fragment.app.FragmentManager; 6 import androidx.lifecycle.Lifecycle; 7 import androidx.viewpager2.adapter.FragmentStateAdapter; 8 import androidx.viewpager2.widget.ViewPager2; 9 import java.util.ArrayList; 10 11 /** Adapter for the {@link androidx.viewpager2.widget.ViewPager2} used in {@link ResultActivity}. */ 12 class ResultVpAdapter extends FragmentStateAdapter { 13 14 private final ArrayList<Fragment> fragments; 15 private final ArrayList<String> titles; 16 17 /** 18 * Constructor to set predefined Fragments and their titles. 19 * 20 * @param fragmentManager of {@link ViewPager2}'s host 21 * @param lifecycle of {@link ViewPager2}'s host 22 * @param fragments ArrayList of predefined Fragments (in correct order) 23 * @param titles ArrayList of titles of the predefined Fragments in param {@code fragments} 24 * (respectively for the Fragment at the same position in param {@code fragments} 25 */ ResultVpAdapter( @onNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, ArrayList<Fragment> fragments, ArrayList<String> titles)26 public ResultVpAdapter( 27 @NonNull FragmentManager fragmentManager, 28 @NonNull Lifecycle lifecycle, 29 ArrayList<Fragment> fragments, 30 ArrayList<String> titles) { 31 super(fragmentManager, lifecycle); 32 this.fragments = fragments; 33 this.titles = titles; 34 } 35 36 /** 37 * Returns the predefined Fragment (set with constructor) at position param {@code position}. 38 * Returns a new Fragment if no predefined Fragment exists at position. 39 * 40 * @param position int position of the predefined Fragment 41 * @return Fragment at position param {@code position} or new Fragment if no predefined Fragment 42 * exists at position 43 */ 44 @NonNull 45 @Override createFragment(int position)46 public Fragment createFragment(int position) { 47 if (position >= 0 && position < getItemCount()) { 48 return fragments.get(position); 49 } 50 return new Fragment(); 51 } 52 53 @Override getItemCount()54 public int getItemCount() { 55 return fragments.size(); 56 } 57 58 /** 59 * Returns the predefined title (set with constructor) at position param {@code position}. Returns 60 * an empty String if no predefined Fragment exists at position. 61 * 62 * @param position int position of the predefined title 63 * @return String title at position param {@code position} or empty String if no predefined title 64 * exists at position 65 */ getTitle(int position)66 public String getTitle(int position) { 67 if (position >= 0 && position < titles.size()) { 68 return titles.get(position); 69 } 70 return ""; 71 } 72 } 73