2013-08-29 66 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)。