Предположим, что ваши фрагменты будут в фиксированных позициях в вашем ViewPager.
Вы должны сделать два фрагмента с двумя разными макетами
давайте назовем их: ImageFragment
и VideoFragment
.
Вы также должны продлить FragmentPagerAdapter
и реализовать getItem(int position)
так:
@Override
public Fragment getItem(int position) {
if (position == 2)
return VideoFragment.newInstance();
return ImageFragment.newInstance();
}
EDIT:
Поэтому на этот раз мы предположим, что у вас есть много изображений и одно видео в конце ViewPager.
поэтому вы можете поместить пути к изображениям в ArrayList<String>
(может быть, локальные или удаленные пути от сервера), а также поместить путь к видео в строковую переменную ... и передать каждую из этих строк в соответствующие фрагменты, например:
public class MultiMediaAdapter extends FragmentPagerAdapter {
private List<String> paths;
private String videoPath;
public MultiMediaAdapter (FragmentManager fm, List<String> paths, String videoPath) {
super(fm);
this.paths = paths;
this.videoPath = videoPath;
}
@Override
public Fragment getItem(int position) {
//pay attintion that position starts counting from zero
if (position == paths.size()) //video at the end of the ViewPager
return VideoFragment.newInstance(videoPath);
return ImageFragment.newInstance(paths.get(position));
}
@Override
public int getCount() {
return this.paths.size()+1; //+1 for the video
}
}
и вы должны загрузить каждое изображение во фрагмент так:
public class ImageFragment extends Fragment {
private String path;
public static ImageFragment newInstance(String path){
ImageFragment fragment = new ImageFragment();
fragment.setPath(path);
return fragment;
}
private void setPath(String path) {
this.path = path;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_image, container, false);
ImageView imageView = rootView.findViewById(R.id.imageView);
if (path != null){
// and here load image into imageView using path, the way you want
}
return rootView;
}
}
и VideoFragment будет так же похож на ImageFragment