如何在Fragment中验证EditText并防止Fragment更改?

3

描述:

我有一个 Fragment Activity FirstRun,其中包含 5 个带有滑动导航片段。第二个和第三个片段包含两个EditTexts,用户需要填写这些字段,并且它们不能为 null 或未填写。

好的,我可以使用 OnTextChanged 监听器验证这些字段,但是用户可能会直接滑动到下一个片段。

问题:

我的问题是如何防止在用户输入值进行验证之前向下滑动到下一个片段?简单地说,如何在用户输入得到验证之前阻止创建片段?

示例:除非填写了第二个片段的 EditText,否则防止向第三个片段滑动。

3个回答

6

好的,经过大约一周的模糊徘徊后,我找到了一个解决方案,可以验证输入,同时也可以防止滑动。

步骤1:首先要实现一个自定义的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;
}
}

步骤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.
               }
          }

这是我目前实现验证的方式。 如果我改进了代码,我会进行更新。


1
在片段中如何访问setPagingEnabled()方法? - iYonatan
如何在活动中实现FirstRunPager?任何信息都将是有帮助的。 - Subin Babu

0

在文本字段填充布尔值之前,您不能让他们滑动。

在滑动处理程序中,只需添加以下内容:

if(filled1 && filled2) 

默认情况下将这些设置为false,然后在添加数据时将其设置为true。

您还可以使每次向文本字段添加数据时,将字符串设置为TextField中的数据,并且除非两个字符串的长度都大于0,否则禁止滑动。


0
你能发一些代码吗?从我的理解来看,你应该在你的滑动导航类中使用IF语句检查编辑文本的存在(无论它是否存在或长度大于0)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接