【问题标题】:Code after fragment is removed still executing删除片段后的代码仍在执行
【发布时间】:2017-09-22 16:40:54
【问题描述】:

我有一个测验应用程序,一旦回答了所有问题,我希望删除该片段。 questions 变量是用户定义对象的队列。

private void loadNextQuestion() {
        if (QuizGameActivity.questions.isEmpty()) {
            getActivity().getSupportFragmentManager().beginTransaction().remove(thisFragment).commit();
        }
        mCurrentQuestion = QuizGameActivity.questions.remove();
        ...
    }

但是,如果我运行它并回答最后一个问题,我会从尝试删除队列中下一个问题的行中收到 java.util.NoSuchElementException。为什么即使队列为空,这条线也会执行?上面的 if 语句应该防止这种情况发生吗?

【问题讨论】:

  • 你需要一个else 案例,你不觉得吗?
  • 如果队列为空,为什么还要执行此行? 因为它不在else 块中。它总是会被执行。是的,即使您删除了片段,该方法仍将继续执行:它仍然是一个方法,除非您显式返回,否则它将继续执行。
  • 看起来你可能需要在你的“if”上加上一个“else”。

标签: java android android-fragments linked-list queue


【解决方案1】:

您正在使用过程语言,即 Java。代码的执行是逐步运行的,直到到达最后一条语句。

如果您不想执行该行,请将其放在 else 部分或放置一个 return 语句

【讨论】:

    【解决方案2】:

    如 cmets 中所述,您需要一个 else 块。您当前的代码将始终运行mCurrentQuestion = QuizGameActivity.questions.remove();

    只需将其更改为以下内容:(对不起,如果这不是您想要做的事情!我无法完全理解您的意图)

    private void loadNextQuestion() {
        if (QuizGameActivity.questions.isEmpty()) {
            getActivity().getSupportFragmentManager().beginTransaction().remove(thisFragment).commit();
        } else {
            mCurrentQuestion = QuizGameActivity.questions.remove();
        }
        ...
    }
    

    【讨论】:

      【解决方案3】:

      您正在使用过程语言编写代码,即逐步执行代码的 Java。

      如果你想摆脱错误,只需在 if 条件下添加 else 部分并将该行放在那里。

      除此之外,您可以添加返回;在 if 条件内。这样执行之后就没有代码了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 2017-11-10
        相关资源
        最近更新 更多