【问题标题】:Using methods inside loops, Java and Android在循环、Java 和 Android 中使用方法
【发布时间】:2012-01-19 17:36:17
【问题描述】:

我正在一个 Android 项目中处理一个 Java 类,它总结了保存在以前的类中的数组条目,每个条目本身都是一个包含多个元素的数组。

我已经创建了在条目中前后移动的方法,但考虑到可能有超过 100 个条目,我想创建另一个方法来循环遍历它们,而不是一遍又一遍地按下“下一步”按钮。 有没有办法做到这一点?

我发现循环只会显示最后一个条目,但下面是我能想到的最好的例子,我需要什么。

for (int i = Selection; i<=Qty; i++){

Num.setText(Integer.toString(i));
    loadNext();

    try{
        Thread.sleep(1500);
    }catch(InterruptedException e){}

    if (Brk=true){
        break;
    }
}

【问题讨论】:

  • 我不了解 Android,但在 Swing 中有一个专用的 UI 线程。如果在 Android 上类似,则必须生成另一个执行循环的线程。否则可能会阻止 UI 更新。

标签: java android arrays loops


【解决方案1】:

最接近您原始答案的解决方案是创建一个执行循环的后台线程,将每个项目加载到Activity.runOnUiThread() 中。您也可以使用AsyncTask 和进度更新来做类似的事情。有关这两个方面的更多信息,请参阅本文:

http://developer.android.com/resources/articles/painless-threading.html

但是,更好的解决方案是根本没有循环 - 只需有一个计时器,并在每次计时器运行时递增循环变量。

【讨论】:

    【解决方案2】:

    它可能会起作用。但是,它会导致您的 UI 在您每次调用 sleep 方法时冻结。一般来说,当你处理 UI 的东西时,永远不要使用 Thread 类。相反,请使用 Handler 类。有很多文档,但是如果在您彻底搜索后找不到一个好的示例,请告诉我。

    【讨论】:

      【解决方案3】:

      您的中断条件似乎错误,并导致循环在第一次迭代时中断:

        if (Brk=true){
              break;
          }
      

      Brk=true 是赋值异常,而不是比较异常。它将始终返回 true。表达式应为Brk==true,以检查变量值是否为真。但同样,它是一个布尔变量,所以你不需要比较,只需在 if 语句中引用它:

        if (Brk){
              break;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-09
        • 2021-09-07
        • 2019-07-03
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 2012-09-15
        相关资源
        最近更新 更多