2015-11-12 67 views
0

我正在爲Android應用製作登錄屏幕。如果用戶輸入錯誤的密碼憑證3次,則編輯文本字段將被禁用30秒。 30秒後,用戶可以再次輸入密碼。我怎樣才能實現它?謝謝在Android中禁用編輯文本字段30秒

+0

http://developer.android.com/intl/es/reference/android/os/CountDownTimer.html –

回答

0

嘗試了這一點...

感謝@ridsatrio,我已經更新了代碼。

editText.setEnabled(false); 
new CountDownTimer(30000, 1000) { 

public void onTick(long millisUntilFinished) { 
    mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
} 

public void onFinish() { 
    mTextField.setVisibility(View.GONE); 
    editText.setEnabled(true); 
} 
}.start(); 
+1

這是相當低效。 'onTick()'將始終被調用,因此在整個時間集合中調用不必要的'editText.setEnabled(false)'。一次調用'setEnabled(false)'就足夠了。 – ridsatrio

0

那麼首先你必須有一個計數器,每當提交一個錯誤的密碼時就增加一個計數器。一個簡單的int領域會做的伎倆:

int passwordAttempt = 0; 

接下來,你必須增加此「計數器」當用戶輸入的密碼錯誤。如果計數器達到3,禁用EditText(30秒後重新啓用它):

if(passwordAttempt == 3) { 
    // User has entered wrong password 3 times. 

    // Disable your EditText. 
    yourEditText.setEnabled(false); 

    // Re-enable your EditText after 30000 milliseconds (30 seconds). 
    new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     yourEditText.setEnabled(true); 
    } 
    }, 30 * 1000); 

    // Reset the counter. 
    passwordAttempt = 0; 
} 
3

你可以嘗試

//Disable your EditText 
Handler handlerTimer = new Handler(); 
handlerTimer.postDelayed(new Runnable(){ 
     public void run() { 
      // Enable it   
     }}, 30000); 

但我認爲這不是一個很好的解決方案,以阻止編輯文本30秒,你爲什麼要這樣做?

我希望能幫到你。

0
int start1=18000; 

final Timer timer = new Timer(); 

new Thread(new Runnable() { 

     @Override 
     public void run() { 
      timer.schedule(new TimerTask() { 
       @Override 
       public void run() { 

        activity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (start1 <= 0) { 
          timer.cancel(); 
          timer.purge(); 
          editTextActivation.setEnabled(true); 
         } 

         start1 = start1 - 1000; 
        } 
        }); 
       } 
      }, 0, 1000); 
     } 
     }).start();