2016-08-02 32 views
1

Ich möchte die BackButton in Fragments verwenden. Ich verwende diesen Code zu handhaben Backbutton:Verwendung von BackButton in Fragmenten 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; 
     } 
    }); 
} 

Wenn ich auf Backbutton klicken dieser Code funktioniert gut, aber wenn Sie auf den Backbutton wieder die App ruft die onBackPressed Methode von MainActivity. Ich weiß nicht warum, aber wenn ich nur eine Toast oder Log.d so etwas in der onKey Methode verwende, dann kann ich es wieder klicken. Ich würde gerne sagen, dass pmenu eine einfache Klasse ist, die nur Musik stoppt, Sachen verschwinden lässt usw. Es scheint, als ob ich irgendwie immer in dieser Klasse geblieben bin. Hast du eine Ahnung, was mache ich falsch?

Antwort

1

Eine sauberere Lösung ist es, eine Schnittstelle von jedem Fragmente mit einer Methode namens onBackPressed() wie folgt umgesetzt zu machen:

public interface FragmentInterface { 
    void onBackPressed(); 
} 

Dann Sie die onBackPressed in yout Aktivität außer Kraft setzen Ihre aktuellen Fragments onBackPressed Aufruf (ich gehe davon aus, dass Sie eine Methode haben Ihre currentFragment zu erhalten)

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

Natürlich in Ihrem Fragmente, implementierte Methode sollte wie folgt aussehen:

@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

Das ist die bessere Lösung! Danke für die Antwort! –

+0

Sie sind herzlich willkommen, Kumpel :-) – Zinc

1

ersetzen false in letzter Zeile mit true und es gibt keine Notwendigkeit für return true vor den letzten

+0

Danke es funktioniert. –