2013-08-29 62 views
3

Descrition:如何验证碎片中的EditText并防止碎片更改?

我有一个片段活动FirstRun它由5个片段滑动导航,第二和第三片段含有2个EditTexts它们都需要由用户来填充,并且他们不必是空的,或不填充的。

好吧,我可以使用OnTextChanged监听器验证字段,但有机会用户可能只需滑动到下一个片段。

问:

我的问题是我怎么能防止刷卡到下一个片段 - 直到某个值由用户在输入的EditText?只是如何防止片段创建,直到用户输入验证?

示例:防止滑动到第3个片段,除非第2个片段的EditText被填充。

回答

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

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

+0

如何访问片段中的setPagingEnabled()? – iYonatan

0

你不能让它们滑动直到TextField被布尔值填充。

在刷卡处理程序只需添加:

if(filled1 && filled2) 

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

你也可以拥有它,因此每次数据被添加到的TextField,一个字符串被设置为在文本字段中的数据,并禁止刷卡除非两个字符串的长度大于0

0

你可以张贴更长一些代码?根据我的理解,您应该使用滑动导航类中的IF语句来检查第二个片段中是否存在编辑文本(无论是否存在或长度大于0)。