RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1062979
Accepted
Andrew
Andrew
Asked:2020-12-25 19:03:53 +0000 UTC2020-12-25 19:03:53 +0000 UTC 2020-12-25 19:03:53 +0000 UTC

在 android 测验中导航时出错

  • 772

我正在应用程序中做一个测验问卷。有前进和后退两个按钮。我展示了一系列问题。先决条件是能够显示最后 5 个已回答的问题。所有问题(包括已回答的问题)、所有答案(如果有)都来自服务器。收到所有内容后,我过滤未回答的问题并将它们添加到数组中。我还将最后 5 个问题的答案放在一个单独的数组中。现在它的工作原理是这样的——在接收、过滤之后,我显示第一个未回答的问题,而显示上一个问题的按钮处于活动状态,而显示下一个问题的按钮处于非活动状态(还没有答案)。我现在可以单击返回查看 5 个已回答的问题及其答案选项。我可以从数组的开头走到结尾,然后后退按钮变为非活动状态,直到按下前进按钮。问题的本质是,只有当我使用后退按钮转到最后一个回答的问题时,我才能正常浏览问题,例如,如果我想查看第一个回答的问题,然后返回第一个未回答的问题,然后我将不得不单击“转发”按钮两次。下面是处理按钮点击的代码:

updateAdapter(0, questionsIndex, answersOptions, 1, ArrayList<Int>())
questionsIndex += 1

next_question.setOnClickListener {
 if (questionsIndex != questionType1.lastIndex) {
 if (userAnswerId != null) {
   Singleton.apiService().sendAnswer("Bearer " + context!!.getSharedPreferences("app_data", 0).getString("access_token", "")!!, OutAnswerModel(questionType1[questionsIndex - 1].id!!, userAnswerId!!))
  .enqueue(object : Callback<OutAnswerModel> {
  override fun onResponse(call: Call<OutAnswerModel>, response: Response<OutAnswerModel>) {
 if (response.isSuccessful) {
  lastAnswersArray.add(0, questionType1[questionsIndex - 1])
  userAnswers.add(0, userAnswerId!!)
  userAnswerId = null
  userAnswers.removeAt(userAnswers.lastIndex)
  lastAnswersArray.removeAt(lastAnswersArray.lastIndex)

  updateAdapter(0, questionsIndex, answersOptions, 1, ArrayList<Int>())
  questionsIndex += 1
 }
  }


   override fun onFailure(call: Call<OutAnswerModel>, t: Throwable) {

}
})
} else if (answerIndex in -1..4) {
when {
answerIndex >= 0 -> {
updateAdapter(1, answerIndex, answersOptions, 2, userAnswers[answerIndex])
}
answerIndex < 0 -> {
answerIndex = 0
updateAdapter(0, questionsIndex - 1, answersOptions, 1, ArrayList<Int>())
}
}
answerIndex -= 1
prev_question.isEnabled = true
}

} else {
workingWithViews(1)

textSetter(finalText!![0], finalText[1], finalText[2])
next.isEnabled = false
Handler().postDelayed({
next.isEnabled = true
}, 1000)
}

}

if (lastAnswersArray.isNotEmpty()) {
prev_question.setOnClickListener {
updateAdapter(1, answerIndex, answersOptions, 2, userAnswers[answerIndex])

if (answerIndex != lastAnswersArray.lastIndex) {
answerIndex += 1
} else {
prev_question.isEnabled = false
}
}
} else {
answerIndex -= 1
prev_question.isEnabled = false


 }

我的算法很可能在某个地方失败了,但我无法确切知道在哪里以及如何修复它。它似乎考虑了一切,但它并没有按应有的方式工作。也许解释不是很清楚,所以如果有人不明白,请询问。

UPD

算法的问题似乎可以定位。当我点击后退按钮时,我将响应索引增加 1:

if (answerIndex != lastAnswersArray.lastIndex) {
answerIndex += 1 // тут 
} else {
prev_question.isEnabled = false
}

然后我按下“前进”按钮并将索引减 1:

else if (answerIndex in -1..4) {
answerIndex -= 1 // тут 
when {
answerIndex >= 0 -> {
updateAdapter(1, answerIndex, answersOptions, 2, userAnswers[answerIndex])
}
answerIndex < 0 -> {
answerIndex = 0
updateAdapter(0, questionsIndex - 1, answersOptions, 1, ArrayList<Int>())
}}
prev_question.isEnabled = true
}

事实证明,当我们点击“后退”时,我们增加了索引,当我们点击“前进”时,我们减少了它,结果,我们需要按下它两次,以便索引减少到足以触发条件。还没想好怎么解决:(

android
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Andrew
    2020-12-26T01:06:43Z2020-12-26T01:06:43Z

    事实证明一切都很简单。我堆积了一堆数组和一堆索引,最终让我感到困惑。我最后做了什么:一个数组和一个索引。在数组的开头将有 5 个已回答的问题,然后是未回答的问题。导航也超简单,后退键:

      prev_question.setOnClickListener {
         questionsIndex -= 1
    
         if (questionsIndex >= 0) {
           if (questionsIndex == 0) {
              prev_question.isEnabled = false
           }
           updateAdapter(questionsIndex, answersOptions, 2, userAnswers[questionsIndex])
          }
        }
    

    按钮“前进”,出现错误的片段:

    else if (questionsIndex in -1..4) {
         questionsIndex += 1
    
         if (questionsIndex <= 4) {
            updateAdapter(questionsIndex, answersOptions, 2, userAnswers[questionsIndex])
         } else {
           updateAdapter(questionsIndex, answersOptions, 1, ArrayList<Int>())
         }
        prev_question.isEnabled = true
    }
    

    现在 index 不是从 0 开始而是从 5 开始,即会显示第一个未回答的问题。此外,我希望代码中的一切都很清楚。没有必要围栏和建造任何东西,一切都比一开始​​更简单,更清晰。如果有人有任何问题或建议 - 询问/建议 :)

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5