Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.62 KB | None | 0 0
  1. package adammia.example.com.mdquiz;
  2.  
  3. import android.content.Context;
  4. import android.content.DialogInterface;
  5. import android.os.Bundle;
  6. import android.support.v7.app.AlertDialog;
  7. import android.support.v7.app.AppCompatActivity;
  8. import android.view.Menu;
  9. import android.view.MenuInflater;
  10. import android.view.MenuItem;
  11. import android.view.MotionEvent;
  12. import android.view.View;
  13. import android.view.inputmethod.InputMethodManager;
  14. import android.widget.Button;
  15. import android.widget.CheckBox;
  16. import android.widget.EditText;
  17. import android.widget.RadioButton;
  18. import android.widget.RadioGroup;
  19. import android.widget.RatingBar;
  20. import android.widget.TextView;
  21. import android.widget.Toast;
  22.  
  23. import java.util.ArrayList;
  24.  
  25. /**
  26. * Created by adammia on 2017. 03. 21.
  27. */
  28.  
  29. public class QuizActivity extends AppCompatActivity {
  30. //private static final String TAG ="QuizActivity";
  31. private final int NUMBER_OF_QUESTIONS = 10;
  32. private ArrayList<Question> questions;
  33. private TextView questionTextView;
  34. private TextView evaluateTextView;
  35. private TextView questionNumberTextView;
  36. private TextView scoreTextView;
  37. private EditText answerEditText;
  38. private Question currentQuestion;
  39. private RadioGroup choiceRadioGroup;
  40. private RatingBar scoreRatingBar;
  41. private Button nextButton;
  42. private Button submitButton;
  43. private Button tryAgain;
  44. private int questionId = 0;
  45. private int score = 0;
  46. private int questionNumber = 1;
  47.  
  48.  
  49. @Override
  50. protected void onCreate(Bundle savedInstanceState) {
  51. super.onCreate(savedInstanceState);
  52. setContentView(R.layout.activity_quiz);
  53.  
  54. getSupportActionBar().setDisplayShowHomeEnabled(true);
  55. getSupportActionBar().setLogo(R.drawable.ic_launcher);
  56. getSupportActionBar().setDisplayUseLogoEnabled(true);
  57.  
  58. evaluateTextView = (TextView) findViewById(R.id.evaluate_text);
  59. questionTextView = (TextView) findViewById(R.id.question_text);
  60. answerEditText = (EditText) findViewById(R.id.question_answer);
  61. answerEditText.setText("");
  62. questionNumberTextView = (TextView) findViewById(R.id.question_number);
  63. scoreTextView = (TextView) findViewById(R.id.score_number);
  64. choiceRadioGroup = (RadioGroup) findViewById(R.id.radio_group);
  65. scoreRatingBar = (RatingBar) findViewById(R.id.ratingBar);
  66. nextButton = (Button) findViewById(R.id.button_next_question);
  67. submitButton = (Button) findViewById(R.id.button_submit_question);
  68. tryAgain = (Button) findViewById(R.id.button_try_again);
  69. //** Creates and populates questions in ArrayList
  70. questions = new ArrayList<Question>();
  71. populateQuestionArrayList();
  72. //** Set first question
  73. displayQuestion();
  74.  
  75.  
  76. //** recovering the instance state
  77. if (savedInstanceState != null) {
  78. score = savedInstanceState.getInt(getString(R.string.score));
  79. questionNumber = savedInstanceState.getInt(getString(R.string.question_number));
  80. } else
  81. init();
  82. }
  83.  
  84. @Override
  85. public boolean onCreateOptionsMenu(Menu menu) {
  86. //**Inflate the menu; this adds items to the action bar if it is present.
  87. MenuInflater mMenuInflater = getMenuInflater();
  88. getMenuInflater().inflate(R.menu.menu_main, menu);
  89. return true;
  90. }
  91.  
  92.  
  93. /**
  94. * Handle menu with message, for redirection to start page, with a little delay
  95. */
  96. @Override
  97. public boolean onOptionsItemSelected(MenuItem item) {
  98. if (item.getItemId() == R.id.material_io) {
  99. askToClose();
  100. Toast.makeText(QuizActivity.this,
  101. R.string.redirect,
  102. Toast.LENGTH_LONG)
  103. .show();
  104. }
  105. if (item.getItemId() == R.id.md_assets) {
  106. askToClose();
  107. Toast.makeText(QuizActivity.this,
  108. R.string.redirect,
  109. Toast.LENGTH_LONG)
  110. .show();
  111. }
  112. return super.onOptionsItemSelected(item);
  113. }
  114.  
  115. @Override
  116. protected void onSaveInstanceState(Bundle outState) {
  117. super.onSaveInstanceState(outState);
  118. outState.putInt(getString(R.string.score), score);
  119. outState.putInt(getString(R.string.question_number), questionNumber);
  120. }
  121.  
  122. @Override
  123. protected void onRestoreInstanceState(Bundle savedInstanceState) {
  124. super.onRestoreInstanceState(savedInstanceState);
  125. init();
  126. scoreTextView.setText(String.valueOf(savedInstanceState.getInt(getString(R.string.score))));
  127. questionNumberTextView.setText(String.valueOf(savedInstanceState.getInt(getString(R.string.question_number))));
  128. }
  129.  
  130.  
  131. //** Initialize
  132. public void init() {
  133. questionNumberTextView = (TextView) findViewById(R.id.question_number);
  134. }
  135.  
  136. /**
  137. * clears and populate questions arrayList
  138. * Add new questions here
  139. */
  140. private void populateQuestionArrayList() {
  141. questions.clear();
  142. questions.add(new Question(getString(R.string.Q10), getString(R.string.A10)));
  143. questions.add(new MultiAnswerQuestion(getString(R.string.Q9), getString(R.string.A9), getString(R.string.C91), getString(R.string.C92), getString(R.string.C93), getString(R.string.C94)));
  144. questions.add(new MultiChoiceQuestion(getString(R.string.Q8), getString(R.string.A8), getString(R.string.C81), getString(R.string.C82)));
  145. questions.add(new MultiChoiceQuestion(getString(R.string.Q7), getString(R.string.A7), getString(R.string.C71), getString(R.string.C72), getString(R.string.C73), getString(R.string.C74)));
  146. questions.add(new MultiAnswerQuestion(getString(R.string.Q6), getString(R.string.A6), getString(R.string.C61), getString(R.string.C62), getString(R.string.C63), getString(R.string.C64)));
  147. questions.add(new MultiChoiceQuestion(getString(R.string.Q5), getString(R.string.A5), getString(R.string.C51), getString(R.string.C52), getString(R.string.C53), getString(R.string.C54)));
  148. questions.add(new MultiAnswerQuestion(getString(R.string.Q4), getString(R.string.A4), getString(R.string.C41), getString(R.string.C42), getString(R.string.C43), getString(R.string.C44)));
  149. questions.add(new MultiChoiceQuestion(getString(R.string.Q3), getString(R.string.A3), getString(R.string.C31), getString(R.string.C32)));
  150. questions.add(new MultiAnswerQuestion(getString(R.string.Q2), getString(R.string.A2), getString(R.string.C21), getString(R.string.C22), getString(R.string.C23), getString(R.string.C24)));
  151. questions.add(new MultiAnswerQuestion(getString(R.string.Q1), getString(R.string.A1), getString(R.string.C11), getString(R.string.C12), getString(R.string.C13), getString(R.string.C14)));
  152. }
  153.  
  154.  
  155. /**
  156. * Display question in TextView with data from ArraList questions
  157. */
  158. private void displayQuestion() {
  159. if (questions.size() > 0) {
  160. currentQuestion = questions.get(getQuestionItem());
  161. questionTextView.setText(currentQuestion.getText());
  162. answerEditText.setText("");
  163. choiceRadioGroup.clearCheck();
  164. questionNumberTextView.setText(getString(R.string.question_no) + questionNumber + getString(R.string.per) + NUMBER_OF_QUESTIONS);
  165. if (currentQuestion instanceof MultiChoiceQuestion) {
  166. answerEditText.setVisibility(View.INVISIBLE);
  167. choiceRadioGroup.setVisibility(View.VISIBLE);
  168. ArrayList choices = ((MultiChoiceQuestion) currentQuestion).getChoices();
  169. for (int i = 0; i < choices.size(); i++) {
  170. RadioButton nextChoice = new RadioButton(this);
  171. nextChoice.setText(choices.get(i).toString());
  172. choiceRadioGroup.addView(nextChoice, i);
  173. }
  174. } else if (currentQuestion instanceof MultiAnswerQuestion) {
  175. answerEditText.setVisibility(View.INVISIBLE);
  176. choiceRadioGroup.setVisibility(View.VISIBLE);
  177. ArrayList choices = ((MultiAnswerQuestion) currentQuestion).getChoices();
  178. for (int i = 0; i < choices.size(); i++) {
  179. CheckBox nextChoice = new CheckBox(this);
  180. nextChoice.setText(choices.get(i).toString());
  181. choiceRadioGroup.addView(nextChoice, i);
  182. }
  183. } else {
  184.  
  185. answerEditText.setVisibility(View.VISIBLE);
  186. choiceRadioGroup.setVisibility(View.INVISIBLE);
  187. }
  188. }
  189. }
  190.  
  191. private int getQuestionItem() {
  192. if (questions.size() > 0) {
  193. for (int i = 0; i < questions.size(); i++)
  194. questionId = i;
  195. return questionId;
  196. } else {
  197. return -1;
  198. }
  199.  
  200. }
  201.  
  202. /**
  203. * Gets user answer to question
  204. *
  205. * @return String answer that user has put in EditText R.id.question_answer
  206. */
  207. private String getUserAnswer() {
  208. String answer = answerEditText.getText().toString();
  209. return answer;
  210. }
  211.  
  212.  
  213. /**
  214. * Manage what happens when user clicks Next button
  215. *
  216. * @param v button Next
  217. */
  218. public void nextQuestion(View v) {
  219. nextButton.setVisibility(View.GONE);
  220. submitButton.setVisibility(View.VISIBLE);
  221. choiceRadioGroup.removeAllViews();
  222. nextQuestion();
  223.  
  224. }
  225.  
  226. public void submitQuestion(View v) {
  227. nextButton.setVisibility(View.VISIBLE);
  228. submitButton.setVisibility(View.GONE);
  229.  
  230. if (currentQuestion instanceof MultiChoiceQuestion) {
  231. checkMultiQuestion();
  232. } else if (currentQuestion instanceof MultiAnswerQuestion) {
  233. checkMultiAnswerQuestion();
  234. } else {
  235. checkSimpleQuestion();
  236. }
  237. }
  238.  
  239.  
  240. /**
  241. * Restart the quiz and try again
  242. *
  243. * @param v
  244. */
  245. public void tryAgain(View v) {
  246. score = 0;
  247. questionNumber = 1;
  248. populateQuestionArrayList();
  249. tryAgain.setVisibility(View.GONE);
  250. submitButton.setVisibility(View.VISIBLE);
  251. nextButton.setVisibility(View.GONE);
  252. choiceRadioGroup.setVisibility(View.INVISIBLE);
  253. scoreRatingBar.setVisibility(View.GONE);
  254. questionNumberTextView.setVisibility(View.VISIBLE);
  255. scoreTextView.setVisibility(View.GONE);
  256. evaluateTextView.setVisibility(View.GONE);
  257. answerEditText.setVisibility(View.INVISIBLE);
  258. questionTextView.setVisibility(View.VISIBLE);
  259. displayQuestion();
  260. }
  261.  
  262. /**
  263. * Simple question method
  264. */
  265. private void checkSimpleQuestion() {
  266. String answer = getUserAnswer();
  267. //* check answer in question class and if it is good then give points to user
  268. addScore(answer);
  269. answerEditText.setText(currentQuestion.getAnswer());
  270. if (answer.compareTo(currentQuestion.getAnswer()) == 0) {
  271. answerEditText.setTextColor(getResources().getColor(R.color.colorTrue));
  272. } else {
  273. answerEditText.setTextColor(getResources().getColor(R.color.colorWrong));
  274.  
  275.  
  276. }
  277. }
  278.  
  279. /**
  280. * Multi question method
  281. */
  282. private void checkMultiQuestion() {
  283. String answer = "";
  284. RadioButton nextChoice;
  285. for (int i = 0; i < choiceRadioGroup.getChildCount(); i++) {
  286. nextChoice = (RadioButton) choiceRadioGroup.getChildAt(i);
  287. nextChoice.setEnabled(false);
  288. if (nextChoice.isChecked()) {
  289. answer = "" + (i + 1);
  290. if (answer.compareTo(currentQuestion.getAnswer()) == 0) {
  291. nextChoice.setTextColor(getResources().getColor(R.color.colorTrue));
  292. } else {
  293. nextChoice.setTextColor(getResources().getColor(R.color.colorWrong));
  294. }
  295. }
  296. }
  297. int i = Integer.parseInt(currentQuestion.getAnswer());
  298. nextChoice = (RadioButton) choiceRadioGroup.getChildAt(i - 1);
  299. nextChoice.setTextColor(getResources().getColor(R.color.colorTrue));
  300. addScore(answer);
  301. }
  302.  
  303. /**
  304. * Multi answer question method
  305. */
  306. private void checkMultiAnswerQuestion() {
  307. String answer = "";
  308. CheckBox nextChoice;
  309. for (int i = 0; i < choiceRadioGroup.getChildCount(); i++) {
  310. nextChoice = (CheckBox) choiceRadioGroup.getChildAt(i);
  311. nextChoice.setEnabled(false);
  312. if (((CheckBox) choiceRadioGroup.getChildAt(i)).isChecked()) {
  313. answer += (i + 1);//make answer string like "23" if second and third answer are correct
  314. if (currentQuestion.getAnswer().contains(answer)) {
  315. nextChoice.setTextColor(getResources().getColor(R.color.colorTrue));
  316. } else {
  317. nextChoice.setTextColor(getResources().getColor(R.color.colorWrong));
  318. }
  319. }
  320. if (currentQuestion.getAnswer().contains("" + (i + 1))) {
  321. nextChoice.setTextColor(getResources().getColor(R.color.colorTrue));
  322. }
  323. }
  324. addScore(answer);
  325. }
  326.  
  327. /**
  328. * Show next question on screen
  329. */
  330. private void nextQuestion() {
  331.  
  332. if (questionNumber >= NUMBER_OF_QUESTIONS) { //** check if this is last question and than show score
  333. endOfQuiz();
  334. } else {
  335. removeQuestionFromList(); //*first remove current question from list
  336. questionNumber++; //* increase number of question counter
  337. displayQuestion(); //* now get and show next question
  338. }
  339. }
  340.  
  341. /**
  342. * Increase score if answer is correct
  343. *
  344. * @param answer is String answer from user
  345. */
  346. private void addScore(String answer) {
  347. int i = currentQuestion.checkAnswer(answer);
  348. if (i == 0) {
  349. score++;
  350.  
  351. Toast.makeText(this, getString(R.string.toast_correct) + score + getString(R.string.per_no), Toast.LENGTH_SHORT).show();
  352.  
  353. } else {
  354. Toast.makeText(this, R.string.toast_wrong, Toast.LENGTH_SHORT).show();
  355. }
  356. }
  357.  
  358. /**
  359. * Removes current chosen question from ArrayList questions
  360. */
  361. private void removeQuestionFromList() {
  362. if (questionId < questions.size()) {
  363. questions.remove(questionId);
  364. } else {
  365. scoreTextView.setText(R.string.error);
  366. }
  367. }
  368.  
  369. /**
  370. * Manage what happens when user answers on all questions
  371. */
  372.  
  373. private void endOfQuiz() {
  374. tryAgain.setVisibility(View.VISIBLE);
  375. nextButton.setVisibility(View.GONE);
  376. submitButton.setVisibility(View.GONE);
  377. choiceRadioGroup.setVisibility(View.INVISIBLE);
  378. scoreRatingBar.setVisibility(View.VISIBLE);
  379. questionNumberTextView.setVisibility(View.GONE);
  380. scoreTextView.setVisibility(View.VISIBLE);
  381. evaluateTextView.setVisibility(View.VISIBLE);
  382. answerEditText.setVisibility(View.GONE);
  383. scoreTextView.setText(getString(R.string.result) + score + "/" + NUMBER_OF_QUESTIONS);
  384. scoreRatingBar.setRating(score / (NUMBER_OF_QUESTIONS / 5));
  385. switch (score) {
  386. case 10:
  387. questionTextView.setText(R.string.best_100);
  388. evaluateTextView.setText(R.string.evaluationExcellent);
  389. break;
  390. case 9:
  391. questionTextView.setText(R.string.perfect_90);
  392. evaluateTextView.setText(R.string.evaluationExcellent);
  393. break;
  394. case 8:
  395. questionTextView.setText(R.string.excellent_80);
  396. evaluateTextView.setText(R.string.evaluationVeryGood);
  397. break;
  398. case 7:
  399. questionTextView.setText(R.string.excellent_70);
  400. evaluateTextView.setText(R.string.evaluationVeryGood);
  401. break;
  402. case 6:
  403. questionTextView.setText(R.string.welldone_60);
  404. evaluateTextView.setText(R.string.evaluateOk);
  405. break;
  406. case 5:
  407. questionTextView.setText(R.string.god_50);
  408. evaluateTextView.setText(R.string.evaluateOk);
  409. break;
  410. case 4:
  411. case 3:
  412. case 2:
  413. case 1:
  414. questionTextView.setText(R.string.less_30);
  415. evaluateTextView.setText(R.string.evaluateBad);
  416. break;
  417. case 0:
  418. questionTextView.setText(R.string.answer_forquestion);
  419. break;
  420. default:
  421. questionTextView.setText(R.string.you_did);
  422. break;
  423. }
  424. }
  425.  
  426. //** Manage when touch outside of EditText, this method hides the keyboard
  427. @Override
  428. public boolean dispatchTouchEvent(MotionEvent ev) {
  429. if (getCurrentFocus() != null) {
  430. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  431. imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
  432. }
  433. return super.dispatchTouchEvent(ev);
  434. }
  435.  
  436.  
  437. /**
  438. * If back button is pressed, it redirects the user to start page, and game can start again
  439. */
  440. @Override
  441. public void onBackPressed() {
  442. askToClose();
  443. }
  444.  
  445. private void askToClose() {
  446. AlertDialog.Builder builder = new AlertDialog.Builder(QuizActivity.this);
  447. builder.setMessage(R.string.want_toquit);
  448. builder.setCancelable(true);
  449. builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
  450. @Override
  451. public void onClick(DialogInterface dialog, int id) {
  452. finish();
  453. }
  454. });
  455. builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
  456. @Override
  457. public void onClick(DialogInterface dialog, int id) {
  458. dialog.cancel();
  459.  
  460. }
  461. });
  462. AlertDialog alert = builder.create();
  463. alert.show();
  464. }
  465.  
  466. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement