Android onBackStackChanged()未调用

14 android android-fragments fragmentmanager

我有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");
}       
}
Run Code Online (Sandbox Code Playgroud)

但是,onBackStackChanged()在使用该switchFragment方法成功替换片段后,该方法永远不会被调用.

JRo*_*ero 30

您需要添加您ActivityOnBackStackChangedListener使用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();
}
Run Code Online (Sandbox Code Playgroud)

  • 事实证明你必须显式调用:.addToBackStack(null)否则即使正确注册也不会调用onBackStackChanged! (5认同)
  • @BenMarten那是因为默认情况下不会将片段事务添加到Backstack。 (2认同)