【问题标题】:Android - Thread.sleep removes displayed textAndroid - Thread.sleep 删除显示的文本
【发布时间】:2014-05-09 10:54:32
【问题描述】:

我正在编写一个教简单数学的 Android 应用程序。当用户输入正确答案并按下按钮时,将显示一条消息,指示他们是否正确。当答案正确时,我希望消息显示几秒钟,然后重新加载活动。

此代码正确显示消息:

if (answer == userAnswer){          
resultsDisplay.setText(correctResponses[new 
       Random.nextInt(correctResponses.length)]);
}

else if (answer != userAnswer){
resultsDisplay.setText(incorrectResponses[new 
        Random().nextInt(incorrectResponses.length)]);
}

当我添加 Thread.sleep 时,resultsDisplay 的文本要么永远不会设置,要么设置和删除太快以至于我看不到它发生。 loadActivity() 是我用来抽象 onCreate 方法的方法,它适用于所有其他情况,所以这不是问题。线程在调用 loadActivity 之前会休眠,我只想在休眠期间显示 resultsDisplay 文本:

if (answer == userAnswer){          
resultsDisplay.setText(correctResponses[new  
       Random.nextInt(correctResponses.length)]);

    try {
    Thread.sleep(5000);
    loadActivity(operand);
    } 
    catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
}

else if (answer != userAnswer){
resultsDisplay.setText(incorrectResponses[new 
        Random().nextInt(incorrectResponses.length)]);
}

【问题讨论】:

    标签: java android textview sleep


    【解决方案1】:

    在 AsyncTask 中调用 sleep(),因为当前您正在休眠 UI 线程,这并不好。

    您的 asynctask 的蓝图应如下所示:

    class YourAsync extends AsyncTask{
    
          onPreExecute(){
            // show message here
          }
    
          doInBackground(){
           // sleep here
          }
    
          onPostExecute(){
           // remove/reset message (whatever your requirement is )
           // loadActivity
         }
    }
    

    【讨论】:

    • 优秀的解决方案。谢谢你。最终,我最终选择了一个处理程序,在第一个答案link 中找到。它只是减少了代码密集度,我的目标是让这个应用程序尽可能简单。
    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多