按两次退出按钮退出应用程序
我只想退出应用程序只有当退栈是空的。按两次退出按钮退出应用程序
我的应用程序的一部分包含一个库,其中当点击一张图片时,会打开一个显示全屏图像的片段。当在这个全屏幕图像中按下后退按钮时,我想回到画廊片段。我通过添加片段返回堆栈来完成此操作。
但在应用程序的其他部分,当按下后退按钮时,我想显示一个祝酒词“请再次单击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();
}
}
显然没有奏效。
您可以尝试使用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();
}
}
的方法PS:你也需要改变getSupportFragmentManager()
而片段横切。
而且reffer此链接 Why FragmentManager's getBackStackEntryCount() return zero?
你可以尝试一些差异。每当您获得onBackPressed
触发器时,请在活动的onBackPressed
方法中添加退出代码,并在处添加退出代码请检查您的Gallery Fragment是否处于活动状态? ,如果是则执行退出代码,否则更改片段。
//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");
希望这将工作..!
它不工作 –
你添加了片段标签吗?并在活动中添加此代码? –
是的,我做过。但我得到的错误: “MyGalleryFragment myFragment =(MyGalleryFragment)getFragmentManager()。findFragmentByTag(”MY_FRAGMENT“);”所以我做了这样的事情: “Fragment myFragment = getFragmentManager()。findFragmentByTag(”a“);” –
尝试使用
super.onBackPressed();
代替
getFragmentManager().popBackStack();
,并让我们知道结果。
同样的结果。问题是控制总是进入else部分。即使在向后叠加添加一个片段之后。即,即使在(getFragmentManager()。getBackStackEntryCount()> 0)之后也是false。任何想法发生了什么? –
你使用哪种类型的活动?它是AppCompatActivity还是FragmentActivity? –
请确认您是否使用getFragmentManager()或getSupportFragmentManager() – Nitesh
@Nitesh:getFragmentManager()将片段添加到backstack。你能帮我吗? –
你的代码对我来说很好看..你能告诉当你按下后退按钮时发生了什么吗? – Nitesh