2016-08-02 35 views
1

我想在Fragments中使用BackButton。我使用這個代碼來處理後退按鈕:在片段中使用BackButton Android

@Override 
public void onResume() { 
    super.onResume(); 

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

       if (idozit.num > 0) { 
        if (!pmenu.pauseopen) { 
         pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0); 
        } else { 
         pmenu.continuegame(); 
        } 
       } 
       if (idozit.num == 0) { 
        idozit.numnull(db); 
       } 
       //Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

當我點擊後退按鈕的代碼工作正常,但如果單擊後退按鈕再次應用程序調用從MainActivityonBackPressed方法。我不知道爲什麼,但如果我僅使用ToastLog.d類似於onKey方法中的方法,那麼我可以再次單擊它。 我想說pmenu是一個簡單的類,它只是停止音樂,使事情消失等等。它似乎不知何故我總是堅持在這個類。 你有什麼想法我做錯了什麼?

回答

1

一個清潔的解決方案是讓這樣的),通過一個名爲onBackPressed(方法每個片段實現的接口:

public interface FragmentInterface { 
    void onBackPressed(); 
} 

然後,覆蓋onBackPressed在YOUT活動呼喚你的當前片段的onBackPressed(我假設你有一個方法,讓您的currentFragment)

@Override 
public void onBackPressed(){ 
    FragmentInterface currentfragment = getCurrentFragment(); 
    currentfragment.onBackPressed(); 
} 

當然,在你的片段,實現的方法應該是這樣的:

@Override 
public void onBackPressed() { 
    if (idozit.num > 0) { 
     if (!pmenu.pauseopen) { 
      pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0); 
     } else { 
      pmenu.continuegame(); 
     } 
    } 
    if (idozit.num == 0) { 
     idozit.numnull(db); 
    } 
    //Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show(); 
} 
+0

這是更好的解決方案!謝謝你的回答! –

+0

非常歡迎,隊友:-) – Zinc

1

在最後一行替換falsetrue而且也沒有必要return true前的最後一個

+0

謝謝它的作品。 –