Android onBackStackChanged() не вызывается

У меня есть Activity как код ниже:

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

Но метод onBackStackChanged() никогда не вызывается даже после успешной замены фрагментов методом switchFragment.


person Community    schedule 12.05.2014    source источник


Ответы (2)


Вам нужно добавить Activity как OnBackStackChangedListener, используя addOnBackStackChangedListener.

Пример:

@Override
protected void onCreate(Bundle savedInstanceState) {
    .............
    FragmentManager fragmentManager = getFragmentManager();     
    fragmentManager.addOnBackStackChangedListener(this);      
    fragmentManager.beginTransaction().add(R.id.frame_container,fragment, "First").addToBackStack(null).commit();
}
person JRomero    schedule 12.05.2014
comment
Оказывается, вы должны явно вызывать: .addToBackStack(null) иначе onBackStackChanged не вызывается даже при правильной регистрации! - person electronix384128; 05.02.2016
comment
@BenMartenЭто потому, что транзакции фрагментов не добавляются в стопку по умолчанию. - person Pan Long; 19.10.2017

единственное, что нужно сделать, это сделать это onCreate:

getFragmentManager().addOnBackStackChangedListener(this);
person Droid Chris    schedule 07.12.2015