我正在开发一个使用Navigation抽屉的应用程序,所以我必须使用片段来使用抽屉导航。我的问题是我在一个特定的片段,当我按下手机中的硬件后退按钮时它应该退出应用程序。我已经实现了如下。
rootView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View arg0, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK){
if(getFragmentManager().getBackStackEntryCount()>0){
getActivity().finishAffinity();
//return true;
}
else{
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
/* getActivity().finishAffinity();
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
*/
return true;
}
else{
return false;
}
}
});
这里我可以成功退出应用程序,但是当我通过单击图标再次启动应用程序时,它会检查用户是否已登录到应用程序并且如果已经登录,则重定向到我之前所在的片段。当我再次按下后退按钮时,它不会退出应用程序...它会进入登录活动...我该如何解决这个问题?
答案 0 :(得分:0)
我在这很晚了。但是如果您没有想到这一点,那么您在这里最好的选择是构建您的应用程序,以便后退按钮事件从活动片段传播到主机Activity。所以,它就像..如果其中一个活动片段消耗背压,活动就不会对它采取行动,反之亦然。
实现此目的的一种方法是让所有Fragments扩展一个具有抽象'boolean onBackPressed()'方法的基本片段。
跟踪Activity中的活动片段,并在其内部的onBackPressed回调中写下这样的内容
@Override
public void onBackPressed() {
if(!activeFragment.onBackPressed())
super.onBackPressed();
}
}
此post具有详细描述的模式