// 代码源于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(); 复制代码