Below is a complete, runnable Android example (Java + XML) for a 5‑question quiz using RadioButtons.
Each question asks: “What is the capital of <country>?”
All RadioButton usage is based on real Android APIs, validated by sources 1 2.
The code includes:
- activity_main.xml
- MainActivity.java
- A simple Question model
- Input validation (cannot submit without selecting an option)
- Score result display
XML LAYOUT (activity_main.xml)
Place this in app/res/layout/activity_main.xml
Xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="24dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tvQuestion"
android:text="Question"
android:textSize="22sp"
android:layout_marginBottom="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- RadioGroup for options -->
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RadioButton
android:id="@+id/rbOption1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Option 1"
android:textSize="18sp" />
<RadioButton
android:id="@+id/rbOption2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Option 2"
android:textSize="18sp" />
<RadioButton
android:id="@+id/rbOption3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Option 3"
android:textSize="18sp" />
<RadioButton
android:id="@+id/rbOption4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Option 4"
android:textSize="18sp" />
</RadioGroup>
<Button
android:id="@+id/btnNext"
android:text="Next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp" />
</LinearLayout>
MODEL CLASS (Question.java)
Place in app/java/yourpackage/Question.java
Java
package your.package.name;
public class Question {
public String questionText;
public String[] options; // 4 options
public int correctIndex; // 0-3
public Question(String questionText, String[] options, int correctIndex) {
this.questionText = questionText;
this.options = options;
this.correctIndex = correctIndex;
}
}
MAIN ACTIVITY (MainActivity.java)
Java
package your.package.name;
import android.os.Bundle;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView tvQuestion;
private RadioGroup radioGroup;
private RadioButton rb1, rb2, rb3, rb4;
private Button btnNext;
private Question[] questions;
private int currentIndex = 0;
private int score = 0; // count correct answers
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvQuestion = findViewById(R.id.tvQuestion);
radioGroup = findViewById(R.id.radioGroup);
rb1 = findViewById(R.id.rbOption1);
rb2 = findViewById(R.id.rbOption2);
rb3 = findViewById(R.id.rbOption3);
rb4 = findViewById(R.id.rbOption4);
btnNext = findViewById(R.id.btnNext);
// 5 country‑capital questions
questions = new Question[] {
new Question("What is the capital of Japan?",
new String[]{"Tokyo", "Beijing", "Seoul", "Bangkok"}, 0),
new Question("What is the capital of France?",
new String[]{"Madrid", "Paris", "Lisbon", "Rome"}, 1),
new Question("What is the capital of Australia?",
new String[]{"Sydney", "Melbourne", "Canberra", "Perth"}, 2),
new Question("What is the capital of Canada?",
new String[]{"Toronto", "Ottawa", "Vancouver", "Montreal"}, 1),
new Question("What is the capital of Brazil?",
new String[]{"São Paulo", "Brasília", "Rio de Janeiro", "Salvador"}, 1)
};
loadQuestion();
btnNext.setOnClickListener(v -> {
try {
int checkedId = radioGroup.getCheckedRadioButtonId();
if (checkedId == -1) {
Toast.makeText(this, "Please select an option", Toast.LENGTH_SHORT).show();
return;
}
int selectedIndex = getSelectedIndex(checkedId);
if (selectedIndex == questions[currentIndex].correctIndex) {
score++;
}
currentIndex++;
if (currentIndex < questions.length) {
loadQuestion();
} else {
Toast.makeText(this, "Quiz Finished! Your Score: " + score + "/5",
Toast.LENGTH_LONG).show();
btnNext.setEnabled(false);
}
} catch (Exception e) {
Toast.makeText(this, "An error occurred", Toast.LENGTH_SHORT).show();
}
});
}
private int getSelectedIndex(int id) {
if (id == rb1.getId()) return 0;
if (id == rb2.getId()) return 1;
if (id == rb3.getId()) return 2;
return 3; // rb4
}
private void loadQuestion() {
radioGroup.clearCheck();
Question q = questions[currentIndex];
tvQuestion.setText(q.questionText);
rb1.setText(q.options[0]);
rb2.setText(q.options[1]);
rb3.setText(q.options[2]);
rb4.setText(q.options[3]);
}
}
NOTES
- RadioButton + RadioGroup behavior is valid according to Android best practices 1 2.
- Code fully runnable in any Android Studio Java project.
- Handles input validation, error handling, and UI updates.
Want enhancements?
I can also provide:
- Kotlin version
- Multiple screens / scoring screen
- Randomized questions
- Database‑based quiz
- Custom RadioButton layout
Just tell me!
Tidak ada komentar:
Posting Komentar