2014-05-12 2 views
14

Ich habe genannt ein Activity wie der folgenden Code:Android onBackStackChanged() nicht

public class AuthenticatedMainActivity extends Activity implements FragmentManager.OnBackStackChangedListener{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ............. 
     FragmentManager fragmentManager = getFragmentManager();   
     fragmentManager.beginTransaction().add(R.id.frame_container,fragment, "First").addToBackStack(null).commit(); 
    } 

    private void switchFragment(Fragment fragment){    
     FragmentManager fragmentManager = getFragmentManager(); 
     fragmentManager.beginTransaction() 
     .replace(R.id.frame_container, fragment).addToBackStack("Tag").commit(); 
    } 

    @Override 
public void onBackStackChanged() { 
    System.out.println("====================================================changeeeeeeeeeeeeeeeeeeeeeeeeee"); 
}  
} 

Aber die onBackStackChanged() Methode ist noch nie Nach erfolgreich ersetzt Fragmenten mit der switchFragment Methode aufgerufen.

Antwort

25

Sie müssen Ihre Activity als OnBackStackChangedListener mit addOnBackStackChangedListener hinzufügen.

Beispiel:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ............. 
    FragmentManager fragmentManager = getFragmentManager();  
    fragmentManager.addOnBackStackChangedListener(this);  
    fragmentManager.beginTransaction().add(R.id.frame_container,fragment, "First").addToBackStack(null).commit(); 
} 
+3

Stellt sich heraus, Sie explizit aufrufen müssen: .addToBackStack (null) sonst onBackStackChanged nicht einmal aufgerufen wird, wenn richtig Eingetragen! –

+0

@ BenMartenDas liegt daran, dass Fragmenttransaktionen standardmäßig nicht zum Backstack hinzugefügt werden. –

-1

das einzige, was ist notwendig, um diese onCreate zu tun:

getFragmentManager().addOnBackStackChangedListener(this);