【问题标题】:Android onBackStackChanged() not called未调用 Android onBackStackChanged()
【发布时间】: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 方法成功替换片段之后也不会被调用。

【问题讨论】:

    标签: android android-fragments fragmentmanager


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多