我正在研究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。 我在做什么错了?
谢谢。
答案 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);