2014-05-12 11 views
14

Mam Activity jak w poniższym kodzie:Android onBackStackChanged() nie nazywa

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"); 
}  
} 

Ale metoda onBackStackChanged() nigdy nazywa nawet po powodzeniem zastąpić fragmenty metodą switchFragment.

Odpowiedz

25

Musisz dodać swoją Activity jako OnBackStackChangedListener przy użyciu addOnBackStackChangedListener.

Przykład:

@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

Okazuje się, trzeba jawnie wywołać: .addToBackStack (null) inaczej onBackStackChanged nie nazywa się nawet wtedy, gdy poprawnie zarejestrowany! –

+0

@ BenMartenTo dlatego, że transakcje fragmentów nie są domyślnie dodawane do backstack. –

-1

jedyną rzeczą, potrzebne jest, aby zrobić to onCreate:

getFragmentManager().addOnBackStackChangedListener(this);