// 代碼源於v4-24.1.1
//這個是FragmentActivity裏面的代碼
public void onBackPressed() {
//很明顯,判斷Fragment棧裏面有沒有回退.
//若是Fragment回退棧有還有Fragment
//則回退一次Fragment,沒有才調用onBackPressedNotHandled();
if (!mFragments.getSupportFragmentManager().popBackStackImmediate()) {
onBackPressedNotHandled();
}
}
-----------------------------------分割線------------------------------------------
// 這個是BaseFragmentActivityEclair裏面的代碼
@Override
void onBackPressedNotHandled() {
//由於新的FragmentActivity是重寫的 onBackPressed() 方法
//因此在這裏調用父類Activity的onBackPressed();
super.onBackPressed();
}
-----------------------------------分割線------------------------------------------
//最終走到的Activity裏面的代碼
public void onBackPressed() {
//這是判斷ActionBar有沒有什麼彈出吧.
if (mActionBar != null && mActionBar.collapseActionView()) {
return;
}
//再次判斷有沒有回退,其實這個判斷對於繼承FrgamentActivity的來講是沒意義的,
//對於繼承Activity的來講是有意義的
if (!mFragments.getFragmentManager().popBackStackImmediate()) {
finishAfterTransition();
}
}
//若是沒有回退了,調用
public void finishAfterTransition() {
//這裏是判斷有沒有設置回退動畫啥的以及退出Activity的處理.
//代碼不少,無論這個判斷是true仍是false,最終都會調用finish();
if (!mActivityTransitionState.startExitBackTransition(this)) {
finish();
}
}
複製代碼
版本不一樣的sdk,可能會有出入. --------------------------------------------分割--------------------------------------------android
//FragmentActivity的onKeyDown()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (android.os.Build.VERSION.SDK_INT < 5 /* ECLAIR */
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
// Take care of calling this method on earlier versions of
// the platform where it doesn't exist. onBackPressed(); return true; } return super.onKeyDown(keyCode, event); } -----------------------------------------分割--------------------------------------- //Activity的onKeyDown() public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.ECLAIR) { event.startTracking(); } else { onBackPressed(); } return true; } .....其餘代碼省略 } 查看Activity的onKeyDown()的源碼,能夠發現,按返回鍵是默認調用的onBackPressed(); 複製代碼