【问题标题】:How do I wait to sentences finish before Android executes setContentView(..)?在 Android 执行 setContentView(..) 之前,我如何等待句子完成?
【发布时间】:2015-12-17 00:50:07
【问题描述】:

正如我所见,Android 不会在 setContentView(...) 之类的语句之前执行所有语句。

例如,我不能这样做:

    Calendar c = Calendar.getInstance();
    int seg = c.get(Calendar.SECOND);
    int min = c.get(Calendar.MINUTE);
    int sum = 1;
    for (int i = seg; i < 5 + seg; i++){
        for(int j = min; j < 10000+ min; j++){
            seg = c.get(Calendar.SECOND);
            sum += seg;
        }
        Toast.makeText(getApplicationContext(), Integer.toString(sum), Toast.LENGTH_SHORT).show();

    }

    setContentView(R.layout.results);

Android 在计算完成之前执行 setContentView。我怎么能做到之前的Android等待语句?

【问题讨论】:

  • 您的具体要求是什么?
  • 对不起,你错了。 Java 按顺序执行函数中的每一行。在上一行完成之前,它不可能跳过行或转到下一行。您的代码中的某处可能存在错误,但事实并非如此。如果在设置内容视图之前您没有看到 5 个祝酒词,那是因为显示祝酒词会向另一个线程发送消息。没有办法停止直到所有的 toast 都显示出来,如果你需要这个功能,你需要滚动你自己的 toast-like UI。
  • 一般来说,Toast 是几乎所有 UI 问题的错误解决方案。像我这样的人在书中使用它是为了简单起见,而不是因为使用 Toast 是个好主意。

标签: android setcontentview


【解决方案1】:

在 UI 线程上运行指定的操作。如果当前线程是 UI 线程,则立即执行该操作。如果当前线程不是UI线程,则将动作发布到UI线程的事件队列中。

更多关于runOnUiThread的信息请查看http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29

把你的代码放进去

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        //put code here 

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多