Как насчет моделирования вопросов в виде стека следующим образом:
data class Question(val resourceId: Int, val answer: Boolean)
val questions = listOf(
Question(R.string.question_1, false),
Question(R.string.question_2, true),
Question(R.string.question_3, true),
Question(R.string.question_4, false),
Question(R.string.question_5, false),
Question(R.string.question_6, true),
Question(R.string.question_7, false),
Question(R.string.question_8, true),
Question(R.string.question_9, false),
Question(R.string.question_10, false),
Question(R.string.question_11, false),
Question(R.string.question_12, true),
Question(R.string.question_13, false),
Question(R.string.question_14, true),
Question(R.string.question_15, false),
Question(R.string.question_16, false),
Question(R.string.question_17, true),
Question(R.string.question_18, false),
Question(R.string.question_19, false),
Question(R.string.question_20, true)
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val questionStack = Stack<Question>()
questionStack.push(questions.first())
findViewById<Button>(R.id.previous_button).setOnClickListener {
if (questionStack.isNotEmpty()) {
questionStack.pop()
if (questionStack.isNotEmpty()) {
questionStack.peek().also { previousQuestion ->
findViewById<TextView>(R.id.text_question).setText(previousQuestion.resourceId)
}
}
}
}
findViewById<Button>(R.id.next_button).setOnClickListener {
if (questionStack.size + 1 <= questions.size) {
questionStack.push(questions.elementAt(questionStack.size))
questionStack.peek().also { nextQuestion ->
findViewById<TextView>(R.id.text_question).setText(nextQuestion.resourceId)
}
}
}
}
Это означает, что вы можете избавиться от переменной questionIndex
и всего кода, связанного с ее обновлением. Кроме того, стек является хорошим способом моделирования простого линейного прямого / обратного потока, когда пользователь нажимает назад, вы открываете стек, и предыдущий вопрос теперь является вопросом над стеком. Когда пользователь нажимает «следующий», вы кладете sh следующий вопрос в стек, и это новый текущий вопрос. Очевидно, вам нужно сделать небольшую проверку работоспособности, прежде чем заглядывать / выталкивать стек (но это включено в мой ответ выше).