大书呆子Android GeoQuiz-答案未传递给CheatActivity

时间:2018-07-10 15:40:07

标签: android android-activity

我正在研究Big Nerd Android GeoQuiz Application,第5章。 正确的解决方案没有传递给CheatActivity。

这是作弊活动:

public class CheatActivity extends AppCompatActivity {
private static final String EXTRA_ANSWER_IS_TRUE = "org.mydomain.geoquiz.answer_is_true";

private boolean mAnswerIsTrue;
private TextView mAnswerTextView;
private Button mShowAnswerButton;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cheat);

    mAnswerIsTrue = getIntent().getBooleanExtra("EXTRA_ANSWER_IS_TRUE", false);

    mAnswerTextView = (TextView) findViewById(R.id.answer_text_view);

    mShowAnswerButton = (Button) findViewById(R.id.show_answer_button);
    mShowAnswerButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mAnswerIsTrue) {
                mAnswerTextView.setText(R.string.true_button);
            } else {
                mAnswerTextView.setText(R.string.false_button);
            }
        }
    });


}

public static Intent newIntent(Context packageContext, boolean answerIsTrue) {
    Intent intent = new Intent(packageContext, CheatActivity.class);
    intent.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue);
    return intent;
}

}

它由测验活动调用:

        mCheatButton = (Button) findViewById(R.id.cheat_button);
    mCheatButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();
            Intent intent = CheatActivity.newIntent(QuizActivity.this, answerIsTrue);
            startActivity(intent);
        }
    });

使用调试器,我看到传递了正确的值。 但是在我设置mAnswerIsTrue的作弊活动中,始终将其设置为false。 我在做什么错了?

谢谢。

1 个答案:

答案 0 :(得分:1)

您要在Intent中传递两个不同的字符串:在新的Intent方法中,您传递的变量EXTRA_ANSWER_IS_TRUE在作弊活动开始时已正确定义。 当您检索意图mAnswerIsTrue = getIntent().getBooleanExtra("EXTRA_ANSWER_IS_TRUE", false); 时,您使用的是字符串“ EXTRA_ANSWER_IS_TRUE”,这不是上面设置的变量。因此,mAnswerIsTrue变量会带来默认值false。 所以要解决这个问题

mAnswerIsTrue = getIntent().getBooleanExtra("EXTRA_ANSWER_IS_TRUE", false);

与此

mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);