Seri Tutorial Android Studio (Bagian 6: Logika Kuis (B) – Mengelola Banyak Soal)
Selamat datang di Bagian 6! Di Bagian 5, kita berhasil membuat kuis dengan satu soal. Tentu saja ini tidak cukup. Jika kita ingin 10 soal, menyalin-tempel logika `if/else` 10 kali adalah mimpi buruk.
Hari ini, kita akan merombak total logika kuis kita agar menjadi profesional dan terukur (scalable). Kita akan menggunakan dua alat Kotlin yang sangat kuat:
- Data Class: Sebuah "cetak biru" atau "templat" untuk menyimpan semua informasi tentang satu soal.
- List: Sebuah "koleksi" atau "daftar" untuk menampung semua objek soal kita.
Langkah 1: Membuat "Cetak Biru" Soal (Data Class)
Sebuah `Data Class` adalah cara khusus di Kotlin untuk membuat kelas yang tujuannya hanya untuk *menyimpan data*.
- Di panel Proyek, klik kanan pada folder
java/com.namapaketanda...Anda. - Pilih New > Kotlin Class/File.
- Beri nama file: Question (Pastikan Anda memilih 'Class' atau 'Data Class' dari daftar).
Tempelkan kode ini di dalam file Question.kt yang baru (ganti semua isinya):
package com.namapaketanda.aplikasimatematika
// Ini adalah cetak biru untuk satu soal
data class Question(
val text: String,
val options: List,
val correctAnswerIndex: Int
) Itu saja! Cetak biru kita sudah jadi. Setiap soal sekarang akan memiliki satu teks, satu daftar berisi 4 pilihan, dan satu angka (indeks) jawaban yang benar.
Langkah 2: Memodifikasi QuizActivity.kt
Sekarang, buka QuizActivity.kt. Kita akan melakukan perombakan besar.
Ganti SELURUH isi file QuizActivity.kt Anda dengan kode yang baru dan jauh lebih baik ini. Baca komentar (diawali `//`) untuk memahami setiap bagian.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.namapaketanda.aplikasimatematika.databinding.ActivityQuizBinding
class QuizActivity : AppCompatActivity() {
private lateinit var binding: ActivityQuizBinding
// Variabel untuk menyimpan daftar soal kita
private lateinit var questionList: List
// Variabel untuk melacak kita ada di soal nomor berapa
private var currentQuestionIndex = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityQuizBinding.inflate(layoutInflater)
setContentView(binding.root)
// 1. Muat data soal
questionList = getQuestions()
// 2. Tampilkan soal pertama
loadQuestion()
// 3. Siapkan tombol
setupListeners()
}
// Fungsi untuk memuat dan menampilkan data soal saat ini
private fun loadQuestion() {
val question = questionList[currentQuestionIndex]
binding.textSoal.text = question.text
binding.btnA.text = question.options[0]
binding.btnB.text = question.options[1]
binding.btnC.text = question.options[2]
binding.btnD.text = question.options[3]
}
// Fungsi untuk menyiapkan listener tombol
private fun setupListeners() {
binding.btnA.setOnClickListener { checkAnswer(0) }
binding.btnB.setOnClickListener { checkAnswer(1) }
binding.btnC.setOnClickListener { checkAnswer(2) }
binding.btnD.setOnClickListener { checkAnswer(3) }
}
// Fungsi untuk memeriksa jawaban dan lanjut ke soal berikutnya
private fun checkAnswer(selectedIndex: Int) {
val correctIndex = questionList[currentQuestionIndex].correctAnswerIndex
if (selectedIndex == correctIndex) {
Toast.makeText(this, "Benar!", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Salah. Jawaban: ${questionList[currentQuestionIndex].options[correctIndex]}", Toast.LENGTH_SHORT).show()
}
// Pindah ke soal berikutnya
currentQuestionIndex++
if (currentQuestionIndex < questionList.size) {
loadQuestion()
} else {
Toast.makeText(this, "Kuis Selesai!", Toast.LENGTH_LONG).show()
// Nanti kita akan pindah ke Halaman Skor di Bagian 7
}
}
// Fungsi untuk membuat data soal (bisa diganti dari database nanti)
private fun getQuestions(): List {
return listOf(
Question(
text = "Berapa hasil dari 5 + 7?",
options = listOf("10", "12", "11", "13"),
correctAnswerIndex = 1
),
Question(
text = "Apa ibukota Indonesia?",
options = listOf("Surabaya", "Bandung", "Jakarta", "Medan"),
correctAnswerIndex = 2
),
Question(
text = "Berapa hasil dari 8 x 4?",
options = listOf("32", "30", "36", "24"),
correctAnswerIndex = 0
)
)
}
} Kesimpulan & Apa Selanjutnya?
Jalankan aplikasi Anda! Sekarang Anda memiliki kuis dinamis dengan 3 soal. Aplikasi ini memuat soal dari daftar, memeriksa jawaban, dan secara otomatis lanjut ke soal berikutnya.
Struktur ini jauh lebih baik! Anda bisa dengan mudah menambah 100 soal lagi di fungsi getQuestions() tanpa menyentuh logika lainnya.
Namun, di akhir kuis, kita hanya menampilkan Toast "Kuis Selesai!". Ini tidak bagus. Kita perlu halaman skor yang layak.
Di Bagian 7, kita akan membuat ScoreActivity dan belajar cara mengirim data (skor) dari satu Activity ke Activity lainnya.
-> Lanjutkan ke Bagian 7: Menyelesaikan Kuis – Membuat Halaman Skor
Keywords: Kotlin Data Class, Kotlin List, ArrayList, Aplikasi Kuis Android, Kuis Dinamis, currentQuestionIndex, Tutorial Android Studio, Pendidikan Matematika

