未调用 Android onBackStackChanged()

Posted

技术标签:

【中文标题】未调用 Android onBackStackChanged()【英文标题】:Android onBackStackChanged() not called 【发布时间】:2014-06-29 06:05:55 【问题描述】:

我有一个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 方法成功替换片段之后也不会被调用。

【问题讨论】:

【参考方案1】:

您需要使用addOnBackStackChangedListenerActivity 添加为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();

【讨论】:

原来你必须显式调用: .addToBackStack(null) 否则即使正确注册也不会调用 onBackStackChanged! @BenMarten那是因为fragment事务默认不添加到backstack。【参考方案2】:

唯一需要做的就是在创建时执行此操作:

getFragmentManager().addOnBackStackChangedListener(this);

【讨论】:

以上是关于未调用 Android onBackStackChanged()的主要内容,如果未能解决你的问题,请参考以下文章

未调用 Android onBackStackChanged()

未调用 Android BLE onCharacteristicChanged()

Android 登录按钮未调用 onActivityResult 或回调方法

在Android中锁定屏幕时未调用BroadcastReceiver

未调用 Android BLE onCharacteristicChanged

片段android中未调用onActivityResult [重复]