未调用 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】:您需要使用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();
【讨论】:
原来你必须显式调用: .addToBackStack(null) 否则即使正确注册也不会调用 onBackStackChanged! @BenMarten那是因为fragment事务默认不添加到backstack。【参考方案2】:唯一需要做的就是在创建时执行此操作:
getFragmentManager().addOnBackStackChangedListener(this);
【讨论】:
以上是关于未调用 Android onBackStackChanged()的主要内容,如果未能解决你的问题,请参考以下文章
未调用 Android onBackStackChanged()
未调用 Android BLE onCharacteristicChanged()
Android 登录按钮未调用 onActivityResult 或回调方法
在Android中锁定屏幕时未调用BroadcastReceiver