【发布时间】:2015-02-15 17:09:52
【问题描述】:
如果我使用 postDelayed 方法,我的 Android 应用程序不会延迟一秒(或 10 秒)。
基本上我希望我的程序在单击按钮后等待一秒钟,然后更新我的 textview ("READY") 上的文本,再等待 2 秒钟,然后再次更新 textview ("SET") 然后它应该开始另一个活动(尚未实现:-))。
使用我的代码,程序启动,在我单击按钮后,textview 立即显示最后一个文本("SET")。它只是不等待。
我做错了什么?
这是我的代码:
public class MyCounterActivity extends Activity {
private long mInternval = 100000;
private Handler mHandler;
private Runnable mStatusChecker = new Runnable() {
@Override
public void run() {
//updateInterval(); //change interval
startRepeatingTask();
}
};
void startRepeatingTask(){
mHandler.postDelayed(mStatusChecker, mInternval);
//mStatusChecker.run();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gym_counter);
final TextView tv1 = (TextView) findViewById(R.id.fullscreen_content);
final Button startButton = (Button) findViewById(R.id.startbutton);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final long up;
EditText textUp = (EditText) findViewById(R.id.editTextUp);
up = Integer.parseInt(textUp.getText().toString());
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//
}
},1000);
Log.d("after 1 runnable", "whaaat");
tv1.setText("Ready");
handler.postDelayed(new Runnable() {
@Override
public void run() {
//
}
}, 2000);
Log.d("after 2nd runnable", "whaaat 2");
//startRepeatingTask();
tv1.setText("SET");
}
});
}
我还尝试使用runOnUiThread() 运行它(在onClick(View v) 内,但结果相同)。我预计它会等待 1 秒(startRepeatingTask())然后运行循环并等待几秒钟......
runOnUiThread(new Runnable() {
@Override
public void run() {
startRepeatingTask();
for (int u = 0; u < up; u++){
startRepeatingTask();
}
}
}
});
希望我的描述有意义:-)。
感谢您的帮助!
编辑: 我现在能够为我的第一个问题找到解决方案。 @mad 在这篇文章中的回答帮助了我:How to start a different activity with some delay after pressing a button in android? (这可能与@laalto 试图告诉我的相同。感谢您的提示!)
在onClick()
tv1.setText("READY");
mHandler.postDelayed(mDelay1, 2000);
然后是 Runnable
private Runnable mDelay1 = new Runnable() {
@Override
public void run() {
if (tv1.getText()=="READY")
tv1.setText("SET");
}
};
但是:
如果我想每秒刷新 Textview 上的文本,我该怎么做?我不能只是多次致电mHandler.postDelayed().. 任何帮助表示赞赏。
【问题讨论】:
标签: android