ArrayList сам переходит в конец
В функции есть циклы:
package com.dmitry.searchgame
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.TextView
import androidx.core.content.ContextCompat.startActivity
class MainClass (
private val buttonNext: TextView, var QuestionView: TextView, var AnswerView1: TextView, var AnswerView2: TextView, var AnswerView3: TextView,
private val questions: ArrayList<String>, private val answers: ArrayList<String>, private val contex: Context) {
private var nowQuestion = 0
private var nowAnswer = 0
private var score = 0
@SuppressLint("SetTextI18n")
fun start () {
QuestionView.text = questions[nowQuestion]
nowQuestion++
AnswerView1.text = answers[nowAnswer]
nowAnswer++
AnswerView2.text = answers[nowAnswer]
nowAnswer++
AnswerView3.text = answers[nowAnswer]
nowAnswer++
AnswerView1.setOnClickListener {
QuestionView.text = "Отлично. Ответ верный."
AnswerView1.text = ""
AnswerView2.text = ""
AnswerView3.text = ""
AnswerView1.isClickable = false
AnswerView2.isClickable = false
AnswerView3.isClickable = false
score++
}
AnswerView2.setOnClickListener {
QuestionView.text = "Увы... Ответ не верный. Правильный ответ: ${answers[nowAnswer - 3]}"
AnswerView1.text = ""
AnswerView2.text = ""
AnswerView3.text = ""
AnswerView1.isClickable = false
AnswerView2.isClickable = false
AnswerView3.isClickable = false
}
AnswerView3.setOnClickListener {
QuestionView.text = "Увы... Ответ не верный. Правильный ответ: ${answers[nowAnswer - 3]}"
AnswerView1.text = ""
AnswerView2.text = ""
AnswerView3.text = ""
AnswerView1.isClickable = false
AnswerView2.isClickable = false
AnswerView3.isClickable = false
}
}
//По идее можно сделать рандом нужно просто игратся с числами а точнее с индексами
@SuppressLint("SetTextI18n")
fun main () {
buttonNext.setOnClickListener {
while (questions[nowQuestion] != "1") { //добавляем в массив вопросов 0 и все останавливается
AnswerView1.isClickable = true
AnswerView2.isClickable = true
AnswerView3.isClickable = true
QuestionView.text = questions[nowQuestion]
nowQuestion++
AnswerView1.text = answers[nowAnswer]
nowAnswer++
AnswerView2.text = answers[nowAnswer]
nowAnswer++
AnswerView3.text = answers[nowAnswer]
nowAnswer++
AnswerView1.setOnClickListener {
QuestionView.text = "Отлично. Ответ верный."
AnswerView1.text = ""
AnswerView2.text = ""
AnswerView3.text = ""
AnswerView1.isClickable = false
AnswerView2.isClickable = false
AnswerView3.isClickable = false
score++
}
AnswerView2.setOnClickListener {
QuestionView.text = "Увы... Ответ не верный. Правильный ответ: ${answers[nowAnswer -3]}"
AnswerView1.text = ""
AnswerView2.text = ""
AnswerView3.text = ""
AnswerView1.isClickable = false
AnswerView2.isClickable = false
AnswerView3.isClickable = false
}
AnswerView3.setOnClickListener {
QuestionView.text = "Увы... Ответ не верный. Правильный ответ: ${answers[nowAnswer - 3]}"
AnswerView1.text = ""
AnswerView2.text = ""
AnswerView3.text = ""
AnswerView1.isClickable = false
AnswerView2.isClickable = false
AnswerView3.isClickable = false
}
if (questions[nowQuestion] == "1"){
buttonNext.setOnClickListener {
val i = Intent(contex, SearchGameFinish::class.java)
val b: Bundle? = i.extras
nowQuestion = 0
nowAnswer = 0
startActivity(contex, i, b)
}
}
}
}
}
}
Этот цикл пишет вопросы и ответы, проверяет правильно ли.
И выходит такая ситуация: выводится первый вопрос(фуункция старт) потом я нажимаю buutonNext и почему-то выводится последний вопрос(перед 0)
Ответы (2 шт):
То есть он просто все говорит нажать на все вопросы, и ты спрашиваешь куда он ушел? Я не совсем понял код. Разложи его по частям, и подумай как он проходит. Мне кажется ты в логике накосячил. А еще лучше будет если ты в каждом onClickListener добавишь Log.d("сюда вписываешь название по которому будешь искать","само действие или часть кода") (это логирование, для того чтобы посмотреть как он все это выполняет, если лог не вывелся , то он прошел эту часть.) Log ищешь в logger внизу android-studio
По нормальному тут должно быть исключение IndexOutOfBoundsException. Вот в этом участке кода:
fun start () {
QuestionView.text = questions[nowQuestion]
nowQuestion++
nowQuestion будет равна 1
Далее при нажатии на кнопку buttonNext запускается цикл где:
QuestionView.text = questions[nowQuestion]
nowQuestion++
nowQuestion еще раз инкрементируется и принимает значение 2 и на момент первого выполнения блока кода:
if (questions[nowQuestion] == "1"){
buttonNext.setOnClickListener {
val i = Intent(contex, SearchGameFinish::class.java)
val b: Bundle? = i.extras
nowQuestion = 0
nowAnswer = 0
startActivity(contex, i, b)
}
}
questions[nowQuestion] == "3" если следовать логике. Дальше цикл будет инкрементировать переменную nowQuestion пока не кончится список и должно вызваться исключение IndexOutOfBoundsException.
Я бы посоветовал пересмотреть весь алгоритм в целом, так как циклы в onClickListener внутри которого переназначается этот самый listener это такое себе.