Question: For this assignment, you will display a custom Toast that displays the number of correctly answered questions and the number of incorrectly answered questions. If
For this assignment, you will display a custom Toast that displays the number of correctly answered questions and the number of incorrectly answered questions. If the user has answered all questions, answering the last question will cause the toast to be displayed. If the user has failed to answer all questions, the toast should display an appropriate message. Finally, hitting the next button on the last question should reset the app to it's initial state.
If the user changes their answer before moving to the next question, use the last answer they chose. So, let's say they hit True but then changed their mind and hit False. Use False to check their answer. In addition, add a "Reset" button that resets the app to it's initial state when pressed.
- To get started, download the attached GeoQuiz_CH03r1.zip file and unzip it on your computer.
- Then, import the project into Android Studio.
- Then, modify the code as needed.
QUIZACTIVITY.JAVA
package android.bignerdranch.geoquiz; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class QuizActivity extends AppCompatActivity { public static final String TAG = "QuizActivity"; public static final String KEY_INDEX = "index"; private Button mTrueButton, mFalseButton; private Button mNextButton; private TextView mQuestionTextView; private Question[] mQuestionBank = new Question[] { new Question(R.string.question_australia, true), new Question(R.string.question_oceans, true ), new Question(R.string.question_mideast, false), new Question(R.string.question_africa, false), new Question(R.string.question_americas, true), new Question(R.string.question_asia, true) }; private int mCurrentIndex = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(savedInstanceState != null) mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0); Log.d(TAG, "onCreate(Bundle) called"); setContentView(R.layout.activity_quiz); mQuestionTextView = (TextView)findViewById(R.id.question_text_view); int question = mQuestionBank[mCurrentIndex].getmTextResId(); mTrueButton = (Button)findViewById(R.id.true_button); mFalseButton = (Button)findViewById(R.id.false_button); mNextButton = (Button)findViewById(R.id.next_button); mNextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length; updateQuestion(); } }); // True Button Listener mTrueButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // Code to execute on button click goes here. checkAnswer(true); } }); //False Button Listener mFalseButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { // Code to execute on button click goes here. checkAnswer(false); } }); updateQuestion(); } @Override public void onStart() { super.onStart(); Log.d(TAG, "onStart() called"); } @Override public void onResume() { super.onResume(); Log.d(TAG, "onResume() called"); } @Override public void onPause() { super.onPause(); Log.d(TAG, "onPause() called"); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); Log.i(TAG, "OnSaveInstanceState"); savedInstanceState.putInt(KEY_INDEX, mCurrentIndex); } @Override public void onStop() { super.onStop(); Log.d(TAG, "onStop() called"); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy() called"); } private void updateQuestion() { int question = mQuestionBank[mCurrentIndex].getmTextResId(); mQuestionTextView.setText(question); } private void checkAnswer(boolean userPressedTrue) { boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue(); int messageResId = 0; if(userPressedTrue == answerIsTrue) messageResId = R.string.correct_toast; else messageResId = R.string.incorrect_toast; Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show(); } }
QUESTION.JAVA
package android.bignerdranch.geoquiz; public class Question { private int mTextResId; private boolean mAnswerTrue; public Question(int textResId, boolean answerTrue){ mTextResId = textResId; mAnswerTrue = answerTrue; } public int getmTextResId() { return mTextResId; } public boolean isAnswerTrue() { return mAnswerTrue; } public void setmAnswerTrue(boolean mAnswerTrue) { this.mAnswerTrue = mAnswerTrue; } public void setmTextResId(int textResId) { mTextResId = textResId; } }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
