2013-08-31 19 views
2

我試圖做出的EditText boxvibrate,如果輸入了錯誤的密碼定時器的EDITTEXT盒:只有創建視圖層次可以觸摸其觀點

final Drawable oldBackground = findViewById(R.id.email).getBackground(); 
TimerTask timerTask = new TimerTask() { 
    @Override 
    public void run() { 
     MainActivty.this.findViewById(R.id.password).setBackground(oldBackground); 
     MainActivty.this.findViewById(R.id.email).setBackground(oldBackground); 
    } 
}; 


Toast.makeText(MainActivty.this , valArray.get(0).toString(), Toast.LENGTH_SHORT).show(); 
findViewById(R.id.password).setBackgroundColor(Color.RED); 
findViewById(R.id.email).setBackgroundColor(Color.RED); 
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
v.vibrate(500);Timer timer = new Timer(); 
timer.schedule(timerTask, 1000); 

回答

3

定時任務運行暫時改變顏色原來的線程在不同的線程上。 Ui應該在ui線程上更新。使用runOnUiThread或使用Handler

  runOnUiThread(new Runnable(){ 

       @Override 
       public void run(){ 
       // update ui here 
       } 
      }); 

處理器

Handler m_handler; 
Runnable m_handlerTask ; 
m_handler = new Handler(); 
m_handlerTask = new Runnable() 
{ 
    @Override 
    public void run() { 

    // do something 
    m_handler.postDelayed(m_handlerTask, 1000);  

    } 
    }; 
m_handlerTask.run(); 

您還可以通過runOnUiThread方法使用一個倒數計時器

Countdowntimer in minutes and seconds

+0

我該怎麼稱呼這個 – cxzp

+0

把'runOnUithread'部分放到定時器任務中。或使用處理程序或使用倒數計時器。 – Raghunandan

1

必須使用定時器這樣的:

final TextView lblSSID = (TextView)findViewById(R.id.lblWifiSSID); 
    new Timer().scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new TimerTask() { 
       @Override 
       public void run() { 
        lblSSID.setText(networkConnection.getWifiName()); 
       } 
      }); 
     } 
    }, 0, 5000); 
相關問題