描述:
我有一个片段活动FirstRun,它由5个带滑动导航的片段组成,第2个和第3个片段包含2个需要由用户填充的EditTexts,它们不需要为空或未填充.
好吧,我可以使用OnTextChanged Listener验证字段,但用户可能只需滑动到下一个片段.
题 :
我的问题是,在用户在EditText中输入某些值之前,我是如何阻止滑动到下一个片段的?在验证用户输入之前,如何防止碎片创建?
示例:除非填充第二个片段的EditText,否则阻止滑动到第三个片段.
好吧,经过大约一个星期的徘徊,我找到了一个解决方案来验证输入,同时也防止滑动.
第1步:首先要实现Custom View Pager类
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Toast;
public class FirstRunPager extends ViewPager {
private boolean isPagingEnabled;
public Context context;
public FirstRunPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.isPagingEnabled = true;
this.context = context;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (isPagingEnabled) {
return super.onTouchEvent(event);
}
Toast.makeText(context, "Please fill in the details, then swipe !",
Toast.LENGTH_LONG).show();
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (isPagingEnabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean b) {
isPagingEnabled = b;
}
}
Run Code Online (Sandbox Code Playgroud)
第2步:所以现在我可以通过设置分页启用为false来防止滑动,同时任何触摸事件都由Toast响应,这会提示用户填写所有字段.
第3步:片段可见后
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if (isVisibleToUser) {
// set isPagingEnabled false here
// validate EditText values here using Text Watcher
// if all okay
// set isPagingEnabled = true
// tell the user through a Toast, that he can swipe now.
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在实施验证的方式.如果我改进代码,我会更新它.