Я пытаюсь синхронизировать два ViewPager
s, поскольку, по-видимому, у меня довольно много людей, и я дошел до этого:
private ViewPager mNavPager;
private ViewPager mMainPager;
private final OnPageChangeListener mNavPagerListener = new OnPageChangeListener() {
private boolean mNavDragging;
private int mScrollPosition;
@Override
public void onPageSelected(int position) {
mScrollPosition = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(mNavDragging)
mMainPager.scrollTo(positionOffsetPixels, 0);
}
@Override
public void onPageScrollStateChanged(int state) {
switch(state) {
case ViewPager.SCROLL_STATE_DRAGGING:
case ViewPager.SCROLL_STATE_SETTLING:
mNavDragging = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
mNavDragging = false;
break;
}
}
};
private OnPageChangeListener mMainPagerListener = new OnPageChangeListener() {
private boolean mMainDragging;
private int mScrollPosition;
@Override
public void onPageSelected(int position) {
mScrollPosition = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(mMainDragging)
mNavPager.scrollTo(positionOffsetPixels, 0);
}
@Override
public void onPageScrollStateChanged(int state) {
switch(state) {
case ViewPager.SCROLL_STATE_DRAGGING:
case ViewPager.SCROLL_STATE_SETTLING:
mMainDragging = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
mMainDragging = false;
break;
}
}
};
Если один из них прокручивается вручную, другой подчиняется ему, используя свойство состояния прокрутки. Он прекрасно работает, пока предметы не достигнут своего окончательного положения; на данный момент подчиненный пейджер мгновенно возвращается к ранее выбранному элементу, как будто прокрутка не состоялась.
Я попытался называть ViewPager#setCurrentItem(mScrolledPosition)
множеством различных логических ограничений, но это тоже не работает, хотя иногда это делает хуже. Мне кажется, что с этим нужно что-то сделать, но я не уверен, что.
Как я могу заставить подчиненный пейджер оставаться в правильном положении?