2016-08-09 41 views
1

這是我的類名在片段中如何處理onBackPressed()?

public class PrimaryFragment extends Fragment implements OnRestartRequest { 

    @Override 
    public void onBackPressed() { 
     if (mCardStackLayout.isCardSelected()) { 
      mCardStackLayout.restoreCards(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

錯誤在這條線:super.onBackPressed();

我不知道什麼是在片段類的背面上按下按鈕的問題。

+1

檢查得到這個後 HTTP:/ /stackoverflow.com/questions/5448653/how-to-implement-onbackpressed-in-android-fragments?rq=1 –

+1

請仔細閱讀http://stackoverflow.com/help/how-to-ask – Bobby

+0

閱讀錯誤消息會幫助你。 :) – Sufian

回答

2

Fragment中沒有onBackPressed()方法。你可以做一些事情,比如從片段調用getActivity()。onBackPressed()。

0

Fragmetns沒有自己的OnBackPressed,您必須從其包含該片段的父級Actvitiy處理它們的事務。

例子://在Fragmetn

@Override 
public void onBackPressed() { 
    // This will get you total fragment in the backStack 
    int count = getFragmentManager().getBackStackEntryCount(); 
    switch(count){ 
     case 0: 
      super.onBackPressed(); 
      break; 
     case 1: 
      // handle back press of fragment one 
      break; 
     case 2: 
      // and so on for fragment 2 etc 
      break; 
     default: 
      getFragmentManager().popBackStack(); 
      break; 
    } 
} 
1

父活動,你應該調用從內getActivity()你片段是這樣的:

getActivity().onBackedPressed(); 

注:看你進口權getActivity(),如果你使用android.support.v4.app.Fragment您需要導入正確的軟件包。

1

片段沒有onBackPress()方法,因爲我們有活動。我更喜歡使用下面的代碼處理回機,希望它可以幫助您:

private void handleBackPress(View view) { 


     view.setFocusableInTouchMode(true); 
     view.requestFocus(); 
     view.setOnKeyListener(new View.OnKeyListener() 
     { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) 
      { 
       if(keyCode == KeyEvent.KEYCODE_BACK) 
       { 

        cancelCountDownTimerAndSaveValues(); 

        if (Constants.Fragments.CurrentFragment != null) 
        { 
         getActivity().getSupportFragmentManager().popBackStack(); 

        } 

        return true; 
       } 
       return false; 
      } 
     }); 
    } 

這裏的觀點是你的片段主視圖,你從

View view = inflater.inflate(R.layout.xxxxx, container, false);