Step1: 在接收方的Activity中創建一個newIntent方法【依賴倒置原則,甲方纔知道自己需要什麼數據】
private static final String EXTRA_ANSWER_IS_TRUE = "com.bignerdranch.android.geoquiz.answer_is_true"; public static Intent newIntent(Context packageContext, boolean answerIsTrue) { Intent intent = new Intent(packageContext, CheatActivity.class); intent.putExtra(EXTRA_ANSWER_IS_TRUE, answerIsTrue); return intent; }
Step2: Launching CheatActivity with an extra(在發送方中創建新的activity)
boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue(); Intent intent = CheatActivity.newIntent(QuizActivity.this, answerIsTrue); startActivity(intent);
Step3: 保存發送方發送的數據
private boolean mAnswerIsTrue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cheat); mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false); }
Step4: 接收方應用發送來的數據
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false); 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); } } });
Getting a result back from a child activity
Step1: 給子activity發送一個請求碼以標識
startActivityForResult(intent, REQUEST_CODE_CHEAT); //給子activity發送一個請求碼
Step2: 把子activity中用戶操作返回給前一個activity
private void setAnswerShownResult(boolean isAnswerShown) { Intent data = new Intent(); data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown); setResult(RESULT_OK, data); }
Step3: 訪問子activity發送來的數據
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) { return; } if (requestCode == REQUEST_CODE_CHEAT) { if (data == null) { return; } mIsCheater = CheatActivity.wasAnswerShown(data); } }
Step4: 應用返回的數據
private void checkAnswer(boolean userPressedTrue) { boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue(); int messageResId = 0; if (mIsCheater) { messageResId = R.string.judgment_toast; } else { if (userPressedTrue == answerIsTrue) { messageResId = R.string.correct_toast; } else { messageResId = R.string.incorrect_toast; } } Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show(); }