我只想在后台堆栈为空时退出应用程序。
我的应用程序的一部分包含一个库,其中,当单击图片时,将打开显示全屏图像的片段。在此全屏图像中按下后退按钮时,我想返回到图库片段。我通过将片段添加到后台堆栈来完成此操作。
但是在应用程序的其他部分,当按下后退按钮时,我想要显示一个祝酒词“请再次单击BACK退出”。再次按下后退按钮时,应用程序将关闭。我怎样才能做到这一点?
这是我到目前为止所做的:
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0 ){
getFragmentManager().popBackStack();
} else {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
commonTasks.ShowStringMessage("Please click BACK again to exit");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
//super.onBackPressed();
}
}
显然,它没有用。
答案 0 :(得分:0)
您可以尝试使用getSupportFragmentManager()
它有一个方法可以返回它包含的所有片段的数组,您可以检查其大小如下
boolean doubleBackToExitPressedOnce = false;
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getFragments().size() > 0 ){
getSupportFragmentManager().popBackStack();
} else {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
commonTasks.ShowStringMessage("Please click BACK again to exit");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExitPressedOnce=false;
}
}, 2000);
//super.onBackPressed();
}
}
P.S:您还需要在片段横切时更改getSupportFragmentManager()
。
同时提供此链接 Why FragmentManager's getBackStackEntryCount() return zero?
答案 1 :(得分:0)
你可以试试diff。在您的活动的onBackPressed
方法中添加退出代码,并在您获得onBackPressed
触发器时添加退出代码只需检查您的图库片段是否有效? ,如果是,则执行退出代码,否则更改片段。
//define as field variable
private boolean doubleBackToExit = false;
MyGalleryFragment myFragment = (MyGalleryFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment != null && myFragment.isVisible()) {
if (doubleBackToExit) {
super.onBackPressed();
finishAffinity();
return;
}
this.doubleBackToExit = true;
toastMsg(getResources().getString(R.string.touch_again_to_exit));
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
doubleBackToExit = false;
}
}, 2000);
} else {
//Change Layout/Fragment
}
不要忘记在片段中添加标签...
fragTrans.replace(android.R.id.content, myFragment, "MY_FRAGMENT");
希望这会有效..!
答案 2 :(得分:0)
尝试使用
super.onBackPressed();
而不是
getFragmentManager().popBackStack();
告诉我们结果。