Как отключить слайдинг

202
28 февраля 2018, 08:43

Всем день добрый. Использую 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);
    }
Answer 1

Создаете кастомный 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

Answer 2

Посмотрите этот пример:

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;
 }
}
READ ALSO
Полиморфные методы VS поллиморфный instanceof

Полиморфные методы VS поллиморфный instanceof

При написании кода столкнулся с вопросом: а что же все таки быстрее? Набросал тест:

162
Tomcat websocket задать размер буфера для передачи blob

Tomcat websocket задать размер буфера для передачи blob

при передачи по ws больших объёмов на выскакивает такое

154
SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file

SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file

При отправке сообщения с xml контетном в наследуемом от AbstractPhaseInterceptor классе возникает ошибка SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file

199
Вопрос по поводу реднеринга в JSF <f:ajax

Вопрос по поводу реднеринга в JSF <f:ajax

Код, который нужно обновить :

146