我的button
中有一个activity
。当我按下它时,按照方法" ProcessNumbers()
"叫做。我需要首先在textview
中显示"处理..." 文字的功能,然后处理loop
,以及何时处理loop
在2-3秒后完成,textview
应显示"已处理" 文字。但这不会发生。当我点击button
时,loop
首先运行,2-3秒后,textview
包含"已处理"。为什么在textview
应包含"处理..." ?
private void ProcessNumbers()
{
TextView textViewProcessNumbers = (TextView) findViewById(R.id.textViewProcessNumbers);
textViewProcessNumbers.setText("Processing...");
int k = 0;
for (long i = 0; i <= 1000000000; i++)
{
k = 1;
}
textViewProcessNumbers.setText("Processed...");
}
我在这里错过了什么吗?
答案 0 :(得分:0)
private void ProcessNumbers()
{
TextView textViewProcessNumbers = (TextView) findViewById(R.id.textViewProcessNumbers);
textViewProcessNumbers.setText("Processing...");
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 30000ms
textViewProcessNumbers.setText("Processed...");
}
}, 30000);
}
使用处理程序进行延迟。希望它有所帮助
答案 1 :(得分:0)
您需要将该过程移至后台线程,例如使用AsyncTask,因为在离开主线程之前,textview不会更新。 也不建议在UI线程上执行长时间运行的操作,这可能会导致出现“应用程序无响应”对话框。
所以 1.将标签设置为Processing ... 2.使用您的进程启动AsyncTask 2.当AsyncTask完成更新onPostExecute中的标签
时答案 2 :(得分:0)
您可以使用CountDownTimer
,在查找文本视图后添加此代码。
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
textViewProcessNumbers.setText("Processing...");
}
public void onFinish() {
textViewProcessNumbers.setText("Processed...");
}
}.start();
CountDownTimer(long millisInFuture,long countDownInterval)