2014-01-24 199 views
0

我正在開發一個使用導航抽屜的應用程序,因此我必須使用片段來使用抽屜進行導航。我的問題是我在一個特定的片段,當我按下手機中的硬件返回按鈕時,它應該退出應用程序。我已經實現它如下。後退按鈕處理片段

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

我已經很晚了。但是如果你還沒有弄明白這一點,那麼你在這裏最好的選擇就是設計你的應用程序,使得後退按鈕事件從活動片段傳播到宿主活動。所以,就像......如果其中一個活動片段消耗了背印,活動將不會按照它進行,反之亦然。

一種方法是讓所有片段擴展一個基本片段,該片段具有一個抽象的「布爾onBackPressed()」方法。

您的活動內,裏面活性片段保持軌道的onBackPressed回調寫這樣的事情

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

post有這種模式的詳細

描述