Всем день добрый. Использую 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;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При написании кода столкнулся с вопросом: а что же все таки быстрее? Набросал тест:
при передачи по ws больших объёмов на выскакивает такое
При отправке сообщения с xml контетном в наследуемом от AbstractPhaseInterceptor классе возникает ошибка SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file