Каждая страница в ViewPager
будет отличаться от экземпляра от Fragment
, но не требуется, чтобы каждая страница отличалась class
от Fragment
.
В слишком простом приложении вы можете представить, что на каждой странице в ViewPager
будет просто отображаться другое число.Этого можно добиться, создав класс OneFragment
для отображения «1», класс TwoFragment
для отображения «2» и т. Д.Или вы можете создать один класс NumberFragment
и использовать пятнадцать различных экземпляров для отображения пятнадцати различных чисел:
public class NumberFragment extends Fragment {
public static NumberFragment newInstance(int number) {
Bundle args = new Bundle();
args.putInt("number", number);
NumberFragment fragment = new NumberFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.number_fragment, container, false);
int number = getArguments().getInt("number");
String numberText = String.valueOf(number);
TextView numberView = root.findViewById(R.id.numberView);
numberView.setText(numberText);
return root;
}
}
С этим на вашем FragmentPagerAdapter
невероятно просто:
public class MyAdapter extends FragmentPagerAdapter {
@Override
public Fragment getItem(int position) {
return NumberFragment.newInstance(position);
}
@Override
public int getCount() {
return 15;
}
}
Эта же концепция применима даже в более сложных приложениях.Поскольку каждая страница ViewPager
имеет одинаковую структуру со своими данными, вы можете просто создать новый экземпляр одного класса Fragment
, передав необходимую конфигурацию в newInstance()
.
. Вы можететакже смешайте и сопоставьте эту технику с той, в которой вы создаете новый подкласс Fragment
для каждой страницы.Возможно, вы хотите, чтобы ваша первая и последняя страницы были уникальными, но тринадцать средних страниц в основном одинаковы.