Android中的onBackStackChanged()方法未被调用

14

我有一个 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");
}       
}

但即使使用switchFragment方法成功替换了片段,onBackStackChanged()方法也不会被调用。

2个回答

30

你需要使用addOnBackStackChangedListener将你的Activity添加为OnBackStackChangedListener

示例:

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

6
事实证明,你需要显式调用:.addToBackStack(null),否则即使正确注册,也不会调用onBackStackChanged! - electronix384128
2
@BenMarten这是因为片段事务默认不会被添加到返回栈中。 - Pan Long

0

唯一需要做的就是在 onCreate 中执行此操作:

getFragmentManager().addOnBackStackChangedListener(this);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接