Как обработать нажатие TabLayout, прежде чем переходить на следующую вкладку? - PullRequest
0 голосов
/ 04 января 2019

У меня есть четыре вкладки с ViewPager, прикрепленными к OnTabSelected. Одна из вкладок содержит поля формы. После того, как пользователь внес какие-либо изменения, я не должен позволять пользователю переходить на следующую вкладку, пока он не сохранит изменения.

(Другими словами, вместо OnTabSelected следует бросить alert на *1006*)

Но я не могу контролировать TabLayout -> "addOnTabSelectedListener"

Любая помощь будет отличной

binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
    override fun onTabSelected(tab: TabLayout.Tab) {
        if (State.isClear()) {
            showNextTab()
        } else {
            showSaveSelectionAlert()
        }
    }

    override fun onTabUnselected(tab: TabLayout.Tab) {
    }

    override fun onTabReselected(tab: TabLayout.Tab) {
    }
})

Ответы [ 2 ]

0 голосов
/ 04 января 2019
boolean isShowNext = true;

if(isShowNext)
{
   viewPager.setCurrentItem(1);
}
else{
   // show alert here
}
0 голосов
/ 04 января 2019

См. Этот ответ . Показанное здесь CustomViewPager не разрешает какую-либо прокрутку, если только вы специально не разрешите это, установив для setPagingEnabled значение true. Моя идея заключалась бы в том, чтобы setPagingEnabled было равно false, пока пользователь не заполнил все поля. Если это так, то пейджинг будет снова включен, и поэтому пользователь может перейти к следующей вкладке. В противном случае появятся сообщения об ошибках.

Мы можем расширить это и сделать его применимым также к TabLayout. Этот ответ показывает, как отключить щелчок вкладки. onTouch должен быть переопределен немного по-другому, хотя. Если все ваши критерии выполнены, вы должны вернуть false - это означает, что пользователь может переключать вкладку. В противном случае отображаются сообщения об ошибках.

Короче говоря: Отключите пейджинг ViewPager и переключение вкладок TabLayout с помощью ссылок, которые я вам предоставил. Включите его, как только ваши критерии будут выполнены, иначе покажите ошибки.

...