В качестве альтернативы, вы можете использовать пользовательский HorizontalScrollView
вместо ViewPager
и перезаписать его onTouchEvent
метод, чтобы получить тот же эффект привязки, который вы получаете с ViewPager, например:
public class MyHorizontalScrollView extends HorizontalScrollView {
public MyHorizontalScrollView(Context context) {
super(context);
}
public MyHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_UP:
if (mScrollable) {
View child = getChildAt(0);
if (child != null) {
final int currentX = getScrollX();
final int windowWidth = getResources().getDisplayMetrics().widthPixels;
final int totalWidth = child.getWidth();
int showingElementNumber = 1;
int i = windowWidth;
while (i < currentX && i < totalWidth) {
i+=windowWidth;
showingElementNumber++;
}
int scrollTo = 0;
if (currentX < (windowWidth * (showingElementNumber - 1) + windowWidth/2)) { // Previouses widths + half the current
scrollTo = windowWidth * (showingElementNumber - 1);
} else {
scrollTo = windowWidth * showingElementNumber + marginSize;
}
smoothScrollTo(scrollTo, 0);
return false;
}
}
return super.onTouchEvent(ev);
default:
return super.onTouchEvent(ev);
}
}
}
Тогда вы можете добавить два Fragments
внутри него и использовать обычный FragmentTransaction
с addToBackStack()
, чтобы получить то, что вы хотите.
ПРИМЕЧАНИЕ: Если вы хотите использовать приведенный выше код, просто убедитесь, что ваши фрагменты имеют ту же ширину, что и весь экран, и помните, что ваша структура должна выглядеть примерно так:
MyHorizontalScrollView > LinearLayout > YourFragment1
> YourFragment2