2016-08-02 94 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

谢谢它的作品。 –