好吧,我在倒计时器启动之前运行了一个线程,然后当该线程内的变量更改其值时,将触发 onTick()
方法内的条件,该条件将调用 onFinish()
并执行所需的操作,问题是在 onTick()
方法上的条件应用之后,倒计时器将继续运行并多次执行 onFinish()
方法,我尝试使用自定义倒计时计时器允许我取消 onTick()
内的计时器,但它不起作用,应用程序只是挂起,我还尝试添加一个标志,以便在 onTick()
已经执行了 onFinish()
时执行代码一次,但它不起作用,它返回 false 值,有时它会返回到父计时器 PS。我确实有两个倒计时器,我想在其中应用上述过程;是存在于第一个的 onFinish()
中的第二个,代码如下:
cdt= new CountDownTimer(10000,1000) {//CountDownTimer(edittext1.getText()+edittext2.getText()) also parse it to long
public void onTick(long millisUntilFinished) {
//here you can have your logic to set text to edittext
}
public void onFinish() {
if(connectionAccepted!=null){
new CountDownTimer(15000,1000) {//CountDownTimer(edittext1.getText()+edittext2.getText()) also parse it to long
public void onTick(long millisUntilFinished) {if(assignMsg!=null){
onFinish();
//Stop the timer here so it doesn't call onFinish more than once
}
//here you can have your logic to set text to edittext
}
public void onFinish() {
chatClient.interrupt();
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.close();
progressDialog.dismiss();
if(assignMsg!=null){
new AlertDialog.Builder(TicketDetails.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Result")
.setMessage("Task has been: "+assignMsg)
.setPositiveButton("Ok", null)
.show();
}else{
chatClient.interrupt();
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.close();
new AlertDialog.Builder(TicketDetails.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Result")
.setMessage("User didn't respond!")
.setPositiveButton("Ok", null)
.show();
}
}
}
.start();
}else{
chatClient.interrupt();
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.close();
progressDialog.dismiss();
new AlertDialog.Builder(TicketDetails.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Result")
.setMessage("Network Error!")
.setPositiveButton("Ok", null)
.show();
}
}
}
.start();
}});
感谢任何帮助。
最佳答案
看起来onFinish()
不能在onTick()
内部调用,相反,这是你可以做的
@Override
public void onTick(long millisUntilFinished){
//your code here
new Handler().post(new Runnable(){
@Override
public void run(){
onFinish();
}
});
}
关于java - 如果发生 onTick 中的条件,则停止 Count DownTimer,然后调用其 onFinish 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235004/