private void startNavi() { BaiduNaviManagerFactory.getRouteResultManager().startNavi(); FragmentManager fm = mActivity.getSupportFragmentManager(); FragmentTransaction tx = fm.beginTransaction(); NaviFragment naviFragment = new NaviFragment(); tx.replace(R.id.fragment_content, naviFragment, "Navi"); tx.addToBackStack(null); tx.commit(); } 这个切换成NaviFragment,为什么了NaviFragment的生命周期是这样的? onCreate: onCreateView: onStart: onResume: onCreate: onPause: onStop: onCreateView: onStart: onResume: 执行了两遍
时间: 2024-04-10 17:32:45 浏览: 113
详解Xamarin.Android 利用Fragment实现底部菜单
在切换到NaviFragment时,其生命周期的执行顺序是正常的。你提到的执行两次的现象可能是由于Fragment的重建导致的。当Fragment从后台切换回前台时,系统会重新创建Fragment实例,并按照正常的生命周期顺序执行。在你的代码中,切换到NaviFragment后,它的生命周期方法会按照以下顺序执行:
1. NaviFragment的onCreate方法会被调用,用于初始化Fragment的状态。
2. 然后会调用onCreateView方法,在该方法中创建和返回该Fragment对应的视图。
3. 接下来会依次调用onStart和onResume方法,表示Fragment已经可见并进入活动状态。
4. 当你执行了tx.commit()提交事务后,当前的Fragment被暂停(onPause)和停止(onStop)。同时,新的NaviFragment开始执行其生命周期方法。
5. 新的NaviFragment的生命周期方法执行顺序与之前相同,先是onCreate、onCreateView、onStart和onResume。
因此,你观察到了两次执行的现象。这是正常的行为,不必担心。如果需要避免这种情况,你可以在切换Fragment之前检查当前是否已经存在NaviFragment实例,避免重复创建。
阅读全文