2014-05-12 19 views
14

Ho un Activity come il codice qui sotto:Android onBackStackChanged() non chiamato

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

Ma il metodo onBackStackChanged() non viene mai chiamato anche dopo aver sostituito con successo i frammenti con il metodo switchFragment.

risposta

25

È necessario aggiungere il Activity come OnBackStackChangedListener utilizzando addOnBackStackChangedListener.

Esempio:

@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

venuto fuori è necessario chiamare in modo esplicito: .addToBackStack (null) altrimenti onBackStackChanged non viene chiamato anche quando correttamente registrato! –

+0

@ BenMarten Questo perché le transazioni di frammenti non vengono aggiunte al backstack per impostazione predefinita. –

-1

l'unica cosa necessaria è di fare questo onCreate:

getFragmentManager().addOnBackStackChangedListener(this); 
Problemi correlati