android activity onBackPressed 未调用
android activity onBackPressed not called
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry bSE = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1);
Fragment frag = getSupportFragmentManager().findFragmentByTag(bSE.getName());
if (frag instanceof BackButtonBlocker)
{
BackButtonBlocker callback = (BackButtonBlocker) frag;
callback.onBackPressed();
}
else {
getSupportFragmentManager().popBackStack();
}
} else {
super.onBackPressed();
}
}
BackButtonBlocker接口用于回调。我的片段实现了 BackButtonBlocker,但有时不会发生 onBackPressed(还有 onKeyUp)。
当我打开导航抽屉时,onBackPressed 和完整的逻辑完全正确。
为什么 activity 失去焦点?
android.support.v4.app.Fragment
public interface BackButtonBlocker{ void onBackPressed();}
从else{}
中取出super.onBackPressed();
我所做的是,我没有实现任何接口来处理后退,见下文。
@Override
public void onBackPressed() {
if (getDrawerLayout().isDrawerOpen(GravityCompat.START)) {
closeLeftMenu();
}
else {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
super.onBackPressed();
} else {
finish(); // Means it is home and you can exit it from here.
}
}}
When drawer is open just close it then use your code.
我通过在 Mainactivity 的容器视图上添加 setFocusableInTouchMode(true); requestFocus();
解决了这个问题
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry bSE = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1);
Fragment frag = getSupportFragmentManager().findFragmentByTag(bSE.getName());
if (frag instanceof BackButtonBlocker)
{
BackButtonBlocker callback = (BackButtonBlocker) frag;
callback.onBackPressed();
}
else {
getSupportFragmentManager().popBackStack();
}
} else {
super.onBackPressed();
}
}
BackButtonBlocker接口用于回调。我的片段实现了 BackButtonBlocker,但有时不会发生 onBackPressed(还有 onKeyUp)。
当我打开导航抽屉时,onBackPressed 和完整的逻辑完全正确。
为什么 activity 失去焦点?
android.support.v4.app.Fragment
public interface BackButtonBlocker{ void onBackPressed();}
从else{}
中取出super.onBackPressed();
我所做的是,我没有实现任何接口来处理后退,见下文。
@Override
public void onBackPressed() {
if (getDrawerLayout().isDrawerOpen(GravityCompat.START)) {
closeLeftMenu();
}
else {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
super.onBackPressed();
} else {
finish(); // Means it is home and you can exit it from here.
}
}}
When drawer is open just close it then use your code.
我通过在 Mainactivity 的容器视图上添加 setFocusableInTouchMode(true); requestFocus();
解决了这个问题