Я реализовал один вид пейджер внутри другого.Требовалось наличие вкладок на родительском пейджере и показ его элемента на дочернем пейджере.Например, пейджер родительского просмотра имеет две вкладки (эпизод, видео), и у нас есть количество эпизодов и видео (пейджер дочернего просмотра), которые необходимо отобразить на соответствующих вкладках.Проблема в том, что когда я провожу пальцем по краям экрана, он меняет вкладку, даже если на текущей вкладке есть больше элементов для загрузки.Но он прекрасно работает, когда я провожу пальцем по центру экрана, и показывает следующий эпизод, когда я нахожусь на вкладке эпизода.
Вот код:
public class ParentPagerAdapter extends FragmentStatePagerAdapter {
private List<String> tabList;
private boolean isPilot;
private ArrayList<?extends IVideoModel> videoList;
private ArrayList<?extends IEpisodeAndVideoModel> episodeList;
public ParentPagerAdapter(FragmentManager fm, List<String> tabList,
ArrayList<?extends IEpisodeModel> episodeList, ArrayList<?extends IVideoModel>
videoList) {
super(fm);
this.episodeList = episodeList;
this.videoList = videoList;
this.tabList = tabList;
}
@Override
public Fragment getItem(int position) {
Fragment fragment;
Bundle bundle = new Bundle();
if(tabList.get(position).contains(VIDEOS_TAB_TITLE)){
fragment = new VideoTabFragment();
return fragment;
}else if(tabList.get(position).contains(EPISODES_TAB_TITLE)){
fragment = new EpisodeTabFragment();
return fragment;
}
return null;
}
@Override
public int getCount() {
return tabList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return tabList.get(position);
}
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
}
Детский вид Пейджер 1:
public class ProjectVideoPagerAdapter extends PagerAdapter {
public final String TAG = ProjectVideoPagerAdapter.class.getCanonicalName();
private Context mContext;
private LayoutInflater mLayoutInflator;
private RowProjectLandingPagerItemBinding itemBinding;
private List<? extends IVideoModel> projectVideoList;
public ProjectVideoPagerAdapter(Context context, List<? extends IVideoModel> projectVideoList) {
mContext = context;
this.projectVideoList = projectVideoList;
mLayoutInflator = ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
debugLog("Entering instantiateItem with position = " + position);
itemBinding =
DataBindingUtil.inflate(mLayoutInflator, R.layout.row_project_landing_pager_item, null,
false);
if (projectVideoList == null) return null;
container.addView(itemBinding.getRoot());
debugLog("Exiting instantiateItem()");
return itemBinding.getRoot();
}
@Override
public int getCount() {
if (projectVideoList != null && !projectVideoList.isEmpty()) return projectVideoList.size();
return 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == (object);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager)container).removeView((View)object);
//super.destroyItem(container, position, object);
}
}
Детский пейджер 2:
public class ProjectVideoPagerAdapter extends PagerAdapter {
public final String TAG = ProjectVideoPagerAdapter.class.getCanonicalName();
private Context mContext;
private LayoutInflater mLayoutInflator;
private RowProjectLandingPagerItemBinding itemBinding;
private List<? extends IEpisodeModel> projectEpisodeList;
public ProjectVideoPagerAdapter(Context context, List<? extends IEpisodeModel> projectList) {
mContext = context;
this.projectEpisodeList = projectList;
mLayoutInflator = ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
debugLog("Entering instantiateItem with position = " + position);
itemBinding =
DataBindingUtil.inflate(mLayoutInflator, R.layout.row_project_landing_pager_item, null,
false);
if (projectEpisodeList == null) return null;
container.addView(itemBinding.getRoot());
debugLog("Exiting instantiateItem()");
return itemBinding.getRoot();
}
@Override
public int getCount() {
if (projectEpisodeList != null && !projectEpisodeList.isEmpty()) return projectEpisodeList.size();
return 0;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == (object);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager)container).removeView((View)object);
//super.destroyItem(container, position, object);
}
}