activity_quiz.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context="com.study.android.geoquizactivity.QuizActivity">
<TextView
android:id="@+id/question_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="@string/question_australia"/>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/true_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/true_button"/>
<Button
android:id="@+id/false_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/false_button"/>
</LinearLayout>
<Button
android:id="@+id/cheat_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cheat_button"/>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/front_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/arrow_left"
android:text="@string/Front_button"/>
<Button
android:id="@+id/next_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableRight="@drawable/arrow_right"
android:text="@string/next_button"/>
</LinearLayout>
</LinearLayout>
layout-land文件夹下的activity_quiz.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context="com.study.android.geoquizactivity.QuizActivity">
<TextView
android:id="@+id/question_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:layout_gravity="center_horizontal"
android:text="@string/question_australia"/>
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/true_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/true_button"/>
<Button
android:id="@+id/false_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/false_button"/>
</LinearLayout>
<Button
android:id="@+id/cheat_button"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cheat_button"/>
<Button
android:id="@+id/next_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:drawableRight="@drawable/arrow_right"
android:text="@string/next_button"/>
</FrameLayout>
QuizActivity.java
package com.study.android.geoquizactivity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class QuizActivity extends AppCompatActivity {
private static final String TAG = "QuizActivity";
private static final String KEY_INDEX = "index";
private static final String EXTRA_ANSWER_SHOWN =
"com.bignerdranch.android.geoquiz.answer_shown";
private static final int REQUEST_CODE_CHEAT = 0;
private Button mTrueButton;
private Button mFalseButton;
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 TextView mQuestionTextView;
private int mCurrentIndex;
private Button mNextButton;
private Button mCheatButton;
private boolean mIsCheater;
private static final String KEY_ANSWERISTRUE = "key_answeristrue";
private static final String EXTRA_ANSWER_CURRENT = "extra_answer_current";
private boolean[] isRecordCheatArray;
private int mIsRecordCheat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
if (savedInstanceState != null) {
mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
mIsCheater = savedInstanceState.getBoolean(KEY_ANSWERISTRUE);
}
initView();
initData();
initEvent();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(KEY_INDEX, mCurrentIndex);
outState.putBoolean(KEY_ANSWERISTRUE, mQuestionBank[mCurrentIndex].isAnswerTrue());
}
private void initData() {
isRecordCheatArray = new boolean[mQuestionBank.length];
for (int i = 0; i < mQuestionBank.length; i++) {
isRecordCheatArray[i] = false;
}
}
private void initView() {
//实例化控件
mTrueButton = findViewById(R.id.true_button);
mFalseButton = findViewById(R.id.false_button);
mNextButton = findViewById(R.id.next_button);
mCheatButton = findViewById(R.id.cheat_button);
mQuestionTextView = findViewById(R.id.question_text_view);
mQuestionTextView.setText(mQuestionBank[mCurrentIndex].getTextResId());
}
private void initEvent() {
//设置匿名内部类监听器
mTrueButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkAnswer(true);
}
});
mFalseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkAnswer(false);
}
});
mNextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mIsCheater = false;
mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;
mQuestionTextView.setText(mQuestionBank[mCurrentIndex].getTextResId());
}
});
mQuestionTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;
mQuestionTextView.setText(mQuestionBank[mCurrentIndex].getTextResId());
}
});
mCheatButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
boolean answerTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();
Intent intent = CheatActivity.newIntent(QuizActivity.this, answerTrue, mCurrentIndex);
/*activity调用startActivity(Intent)方法时,调
用请求实际发给了操作系统。
准确地说,调用请求发送给了操作系统的ActivityManager。ActivityManager负责创建
Activity实例并调用其onCreate(Bundle)方法*/
startActivityForResult(intent, REQUEST_CODE_CHEAT);
}
});
}
/**
* 将用户输入的结果与正确结果进行对比
*
* @param userPressedTrue 用户输入的答案
*/
public void checkAnswer(boolean userPressedTrue) {
boolean correctAnswer = mQuestionBank[mCurrentIndex].isAnswerTrue();
int messageResId = 0;
if (mIsCheater || isRecordCheatArray[mCurrentIndex]) {
messageResId = R.string.jaugment_toast;
} else {
if (userPressedTrue == correctAnswer) {
messageResId = R.string.correct_toast;
} else {
messageResId = R.string.incorrect_toast;
}
}
Toast.makeText(QuizActivity.this, messageResId, Toast.LENGTH_SHORT).show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
if (requestCode == REQUEST_CODE_CHEAT) {
if (data == null) {
return;
}
mIsCheater = wasAnswerShown(data);
mIsRecordCheat = data.getIntExtra(EXTRA_ANSWER_CURRENT, 0);
isRecordCheatArray[mIsRecordCheat] = true;
}
}
public boolean wasAnswerShown(Intent result) {
return result.getBooleanExtra(EXTRA_ANSWER_SHOWN, false);
}
}
activity_cheat.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context="com.study.android.geoquizactivity.CheatActivity">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="24dp"
android:text="@string/warn_text"/>
<TextView
android:id="@+id/answer_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="24dp"
tools:text="Answer"/>
<Button
android:id="@+id/show_answer_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/show_answer_button"/>
</LinearLayout>
CheatActivity.java
package com.study.android.geoquizactivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class CheatActivity extends AppCompatActivity {
private static final String EXTRA_ANSWER_IS_TRUE =
"com.bignerdranch.android.geoquiz.answer_is_true";
private static final String EXTRA_ANSWER_SHOWN =
"com.bignerdranch.android.geoquiz.answer_shown";
private static final String KEY_ANSWERISTRUE = "key_answeristrue";
private static final String EXTRA_ANSWER_CURRENT = "extra_answer_current";
private boolean mAnswerIsTrue;
private TextView mAnswerTextView;
private Button mShowAnswerButton;
public static Intent newIntent(Context packageContext, boolean answerIsTrue, int current) {
Intent intent = new Intent(packageContext, CheatActivity.class);
intent.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue);
intent.putExtra(EXTRA_ANSWER_CURRENT, current);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cheat);
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, true);
if (savedInstanceState != null) {
mAnswerIsTrue = savedInstanceState.getBoolean(KEY_ANSWERISTRUE);
}
mAnswerTextView = findViewById(R.id.answer_text_view);
mShowAnswerButton = findViewById(R.id.show_answer_button);
mShowAnswerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mAnswerIsTrue) {
mAnswerTextView.setText(R.string.true_button);
} else {
mAnswerTextView.setText(R.string.false_button);
}
setAnswerShownResult(true);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_ANSWERISTRUE, mAnswerIsTrue);
}
private void setAnswerShownResult(boolean isAnswerShown) {
Intent data = new Intent();
data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);
setResult(RESULT_OK, data);
}
}
Question.java
public class Question {
//题目,因为题目是strings中的,可以直接引用,所以定义为int,而不是String
private int mTextResId;
//问题的答案
private boolean mAnswerTrue;
public Question(int textResId, boolean answerTrue) {
mTextResId = textResId;
mAnswerTrue = answerTrue;
}
public int getTextResId() {
return mTextResId;
}
public Question setTextResId(int textResId) {
mTextResId = textResId;
return this;
}
public boolean isAnswerTrue() {
return mAnswerTrue;
}
public Question setAnswerTrue(boolean answerTrue) {
mAnswerTrue = answerTrue;
return this;
}
}
PS:该Dem有一个缺陷 在横竖屏切换时 会产生闪退的情况
Demo下载地址:
https://download.csdn.net/download/weixin_43953649/10857996