2016-06-18 10 views
0

Es gibt 2 Fragmente als F1 und F2: Von F1 Ich überbrücke die OnResume für eine OnKeyPressed auf F2 auf Back gedrückt zu gehen. Jetzt in F2 überstehe ich die OnResume für eine OnKeyPressed, um die Anwendung auf Back gedrückt zu schließen. Aber das Problem ist, wenn ich zurück Knopf auf F1 presse, es schließt die App direkt. Durch Logs habe ich festgestellt, dass OnKeyPressed von F2 auch aktiviert wird, wenn ich auf F1 zurück drücke. Wie man das korrigiert.OnKeyPressed wird in 2 Fragmenten zusammen aktiviert

Mein Code ist wie folgt F1:

@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) { 

      System.out.println("back pressed"); 

      switch (keyCode) { 

       case KeyEvent.KEYCODE_BACK: 

        launchFragment(new F2(), F2.class.getSimpleName()); 
        return true; 
      } 
      return false; 
     } 
    }); 
} 

My-Code für F2 ist wie folgt:

@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) { 

      System.out.println("Set back pressed"); 

      switch (keyCode) { 

       case KeyEvent.KEYCODE_BACK: 

        Activity a=getActivity(); 
        a.finish(); 
        return true; 
      } 
      return false; 
     } 
    }); 
} 

Antwort

1

Sie sollten Fragment Transaktion in der übergeordneten Aktivität der Fragmente behandeln. Hier

ist das Beispiel

beim Hinzufügen oder Fragmente ersetzen immer addToBackStack(null) nennen, so etwas wie dies

MyFragment fragment = new MyFragment(); 
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
fragmentTransaction.replace(R.id.container, fragment); 
// This will add the framgent to backStack that we will use later to retrieve the fragment 
fragmentTransaction.addToBackStack(""); 
fragmentTransaction.commit(); 

nun die backpress Ereignisse von Fragmenten in der Mutter Aktivität behandeln onBackPressed(), in dem Ihre Zugabe Fragmente

@Override 
public void onBackPressed() { 
    // get the number of fragments added to the backStack 
    int count = getFragmentManager().getBackStackEntryCount(); 
    switch(count){ 
     // if count is 0 it means no fragment is added yet 
     case 0: 
      super.onBackPressed(); 
      break; 
     case 1: 
      // handle click of backPress in first fragment here 
      // getFragmentManager().popBackStack() will take you to the previous fragment. 
      getFragmentManager().popBackStack(); 
      break; 
     case 2: 
      // handle click of backPress in second fragment here or 
      getFragmentManager().popBackStack(); 
      break; 
     default: 
      getFragmentManager().popBackStack(); 
      break; 
    } 
} 

Dies ist der beste und einzige Ansatz, um die Fragmenttransaktionen und onBac zu behandeln kPressed Ereignisse

Ich hoffe, es hilft