【发布时间】:2015-07-07 21:09:11
【问题描述】:
我有 4 个标签。但在允许用户使用滑动或按选项卡移动到另一个选项卡之前,我想执行与当前选项卡附加的片段相关的所有验证。 我怎样才能做到这一点?
现在 Action Bar Tab Listener 已被弃用,有哪些方法可用于执行此操作?
【问题讨论】:
标签: android android-tabs
我有 4 个标签。但在允许用户使用滑动或按选项卡移动到另一个选项卡之前,我想执行与当前选项卡附加的片段相关的所有验证。 我怎样才能做到这一点?
现在 Action Bar Tab Listener 已被弃用,有哪些方法可用于执行此操作?
【问题讨论】:
标签: android android-tabs
一种方法是在您的TabsPagerAdapter 中,在您的getItemPosition 方法中。
@Override
public int getItemPosition(Object object) {
if (object instanceof ValidatedFragment) {
((ValidatedFragment) object).validate();
}
return super.getItemPosition(object);
}
然后就可以为ValidateFragment定义一个接口了
public interface ValidateFragment {
public void validate();
}
最后,您的片段可以扩展 ValidateFragment 并实现验证:
YouFragment implements ValidateFragment {
....
@override
public void validate(){
//Do your validation here
}
...
}
另一种方法是使用setUserVisibleHint 方法,每次片段可见时都会调用该方法:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//Do your validation here
}
}
编辑:
如果您不希望用户能够在 fragment 未验证的情况下滑动,我认为您应该实现自己的 ViewPager 类,并覆盖 onInterceptTouchEvent 和 onTouchEvent 如果碎片是未验证。
@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;
}
另外,您可以尝试在您的Activity 中使用您的ViewPager 的setOnTouchListener 方法,并在您的Action Bar Tab Listener 中添加一个类似的逻辑
mPager.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
return true;
}
});
This SO question 将有助于实现这两个选项。
【讨论】: