后退按钮处理碎片

时间:2014-01-24 12:12:53

标签: android-fragments back

我正在开发一个使用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;
            }
        }
    });

这里我可以成功退出应用程序,但是当我通过单击图标再次启动应用程序时,它会检查用户是否已登录到应用程序并且如果已经登录,则重定向到我之前所在的片段。当我再次按下后退按钮时,它不会退出应用程序...它会进入登录活动...我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我在这很晚了。但是如果您没有想到这一点,那么您在这里最好的选择是构建您的应用程序,以便后退按钮事件从活动片段传播到主机Activity。所以,它就像..如果其中一个活动片段消耗背压,活动就不会对它采取行动,反之亦然。

实现此目的的一种方法是让所有Fragments扩展一个具有抽象'boolean onBackPressed()'方法的基本片段。

跟踪Activity中的活动片段,并在其内部的onBackPressed回调中写下这样的内容

@Override
public void onBackPressed() {
   if(!activeFragment.onBackPressed())
      super.onBackPressed();
   }
}

post具有详细描述的模式