3

说明:

我有一个 Fragment Activity FirstRun,它由 5 个带有滑动导航的片段组成,第 2 个和第 3 个片段包含 2 个需要由用户填写的EditText,它们不必为空或未填充。

好的,我可以使用 OnTextChanged 侦听器验证字段,但用户可能只是滑动到下一个片段。

问题 :

我的问题是如何防止在用户在 EditText 中输入某个值之前滑动到下一个片段?在验证用户输入之前如何防止片段创建?

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

4

3 回答 3

6

好吧,在模糊地徘徊了大约一周之后,我找到了一个解决输入的解决方案,同时还可以防止滑动。

第 1 步:第一件事是实现一个自定义视图寻呼机类

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 步:所以现在我可以通过设置是否启用分页来防止滑动,同时任何触摸事件都由 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.
               }
          }

这就是我现在实施验证的方式。如果我改进我的代码,我会更新它。

于 2013-08-30T23:52:23.090 回答
0

在 TextField 填充布尔值之前,您不能让它们滑动。

在滑动处理程序中只需添加:

if(filled1 && filled2) 

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

您也可以使用它,以便每次将数据添加到 TextField 时,都会为 TextField 中的数据设置一个字符串,并且除非两个字符串的长度都大于 0,否则不允许滑动。

于 2013-08-29T21:15:59.273 回答
0

你能发布一些代码吗?据我了解,您应该使用滑动导航类中的 IF 语句检查第二个片段中是否存在编辑文本(无论是存在还是长度大于 0)。

于 2013-08-29T21:20:02.170 回答