How do I validate before selecting a new tab or selecting a new snippet using Swipe tabs in Android?
I have 4 tabs. But before allowing the user to navigate to another tab using the Scroll or Tab function, I want to do all of the checks related to the snippet that is attached to the current tab. How can I achieve this?
Now that the action bar tab listener is deprecated, what methods can you use to do this?
source to share
One way to do this is in your TabsPagerAdapter
, in your method getItemPosition
.
@Override
public int getItemPosition(Object object) {
if (object instanceof ValidatedFragment) {
((ValidatedFragment) object).validate();
}
return super.getItemPosition(object);
}
Then you can define an interface for the ValidateFragment
public interface ValidateFragment {
public void validate();
}
And finally, your fragment can extend ValidateFragment and implement validation:
YouFragment implements ValidateFragment {
....
@override
public void validate(){
//Do your validation here
}
...
}
Another way you can do this is by using a method setUserVisibleHint
that gets called every time your fragment is visible:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//Do your validation here
}
}
Edit:
If you don't want the user to be able to scroll if fragment
not checked, I think you should implement your own class ViewPager
and override onInterceptTouchEvent
and onTouchEvent
if the phrase is not validated.
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
//Validate here and return false if the user shouldn't be able to swipe
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//Validate here and return false if the user shouldn't be able to swipe
return false;
}
Alternatively, you can try using a method of setOnTouchListener
yours ViewPager
in yours Activity
and add similar logic to what you have in your actionbar tab listener
mPager.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});
source to share