Всем день добрый. Использую ViewPager и TabLayout в связке. Есть три фрагмента которые переключаются с помощью TabLayout. Есть необходимость отключить возможность перелистывания первого фрагмента. Что бы первый фрагмент переключался только нажатием на TabLayout.
вот кусочек кода где все инициализируется думаю именно тут и должно отключаться но не понимаю как отключить
public void myTabsAll()
{
pager = (ViewPager) findViewById(R.id.pager);
tabsPagerFragment adapter = new tabsPagerFragment(getSupportFragmentManager());
pager.setAdapter(adapter);
tabLayout = (TabLayout) findViewById(R.id.tabl);
tabLayout.setupWithViewPager(pager);
}
Создаете кастомный ViewPager с методом setEnableSwipe для блокировки/разблокировки свайпа
public class DisableSwipeViewPager extends ViewPager {
private boolean enableSwipe;
public DisableSwipeViewPager(Context context) {
super(context);
init();
}
public DisableSwipeViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
enableSwipe = true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return enableSwipe && super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return enableSwipe && super.onTouchEvent(event);
}
public void setEnableSwipe(boolean enableSwipe) {
this.enableSwipe = enableSwipe;
}
}
Затем, указываете его в разметке:
Находите так же по id
DisableSwipeViewPager vp = (DisableSwipeViewPager) findViewById(R.id.disableSwipeVP);
И ставите слушатель на переключение слайдов, чтобы при открытии первого слайда свайп выключался, иначе включался
vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
public void onPageSelected(int position) {
vp.setEnableSwipe(position > 0);
}
});
При желании можно добавить установку OnPageChangeListener прямо в кастомный ViewPager
Посмотрите этот пример:
public class LockedViewPager extends ViewPager {
private boolean isLocked;
public LockedViewPager(Context context) {
super(context);
}
public LockedViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return isLocked;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return isLocked;
}
public void setLocked(boolean locked) {
isLocked = locked;
}
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости