我正在尝试使用edittext boxvibrate并在输入错误密码时立即更改颜色
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);
答案 0 :(得分:6)
计时器任务在不同的线程上运行。 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();
您还可以使用CountDown计时器
答案 1 :(得分:4)
您必须使用定时器 runOnUiThread 方法如下:
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);