有这样一个场景, activity 重启 activity.recareate() 但是会出现 如果启动很快,也就是在 viewPager 中添加 fragment 之前没有耗时的操作,

这时,系统会将没销毁的 fragment 重新附加到 viewPager 中,并没有新建一个 fragmentfragment 在初始化的时候先去 manager 中找寻没有销毁的标识的 tagFragment ,

FragmentPagerAdapter 的部分源码:尤其是 instantiateItem 方法

public abstract class FragmentPagerAdapter extends PagerAdapter {private static final String TAG = "FragmentPagerAdapter";private static final boolean DEBUG = false;private final FragmentManager mFragmentManager;private FragmentTransaction mCurTransaction = null;private Fragment mCurrentPrimaryItem = null;public FragmentPagerAdapter(FragmentManager fm) {mFragmentManager = fm;}.....@Overridepublic Object instantiateItem(ViewGroup container, int position) {if (mCurTransaction == null) {mCurTransaction = mFragmentManager.beginTransaction();}final long itemId = getItemId(position);// Do we already have this fragment?String name = makeFragmentName(container.getId(), itemId);Fragment fragment = mFragmentManager.findFragmentByTag(name);if (fragment != null) {if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);mCurTransaction.attach(fragment);} else {fragment = getItem(position);if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);mCurTransaction.add(container.getId(), fragment,makeFragmentName(container.getId(), itemId));}if (fragment != mCurrentPrimaryItem) {fragment.setMenuVisibility(false);fragment.setUserVisibleHint(false);}return fragment;}.........public long getItemId(int position) {return position;}private static String makeFragmentName(int viewId, long id) {return "android:switcher:" + viewId + ":" + id;}
}
复制代码

为了重启新建 Fragment ,我这里给出最简单的方法,在 Activityrecareate() 方法中移除 fragment

如下所示:

    @Overridepublic void recreate() {try {//避免重启太快恢复FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();for (Fragment fragment : fragmentAdapter.getFragmentsList()) {fragmentTransaction.remove(fragment);}fragmentTransaction.commitAllowingStateLoss();} catch (Exception e) {}super.recreate();}
复制代码

这样在 Activity 在重启时,就会及时创建新的 fragment

Activity 重启recreate() 与ViewPager一起使用出现的问题相关推荐

  1. activity重启问题

    A调用B,B关闭后,A自动重启,原因:A与b的方向不一样 ##横竖屏切换的生命周期 * 默认横竖屏切换Activity被销毁又重新创建,有2中解决方案: 1. 可以把屏幕的朝向写死         a ...

  2. Activity中recreate方法的应用

    參考两篇文章:http://blog.csdn.net/watermusicyes/article/details/47392949 http://blog.csdn.net/droyon/artic ...

  3. Android防止App崩溃的,Android App Crash之后如何禁止Activity重启

    针对crash,android默认的处理方式是,退出app.弹一个提示框. /** * 初始化 * * @param context */ public void init(context conte ...

  4. Activity重新创建之recreate

    Android在3.0之后,Activity引入了新的一个方法:recreate(),从字面意思就知道是重新创建Activity的,3.0+版本才可以使用. /*** 调用recreate方法重新创建 ...

  5. Android官方开发文档Training系列课程中文版:管理Activity的生命周期之停止和重启Activity

    原文地址 : http://android.xsoftlab.net/training/basics/activity-lifecycle/stopping.html#Start 在activity的 ...

  6. Android Activity自动重启的问题

    描述: 最近在做项目时,碰到一个诡异的问题,各种可能的导致的原因排查了一天的时间,最后才解决.为什么说诡异,是因为正常情况下是不会出现该问题的,而且百度上还真找不到相关的资料. 问题表现:一个普通的A ...

  7. android 12 framework开发第53节-Activity的reLaunch及onConfigurationChanged android源码分析

    hi,同学们大家好! 1.Configuration应用开发背景 今天要给大家分享内容就是我们应用开发时候经常会遇到问题,那就是如果系统一些属性变化了,比如语言,横竖屏幕,深色模式等.就会导致系统当前 ...

  8. android 切换语言重启应用程序,不重启应用,android APP内部国际化

    当前android的语言切换,很多项目中都是切换以后需要重启项目,这样的体验是不好的,如何实现当前界面切换,立即能看到效果? 目前项目中只支持中文和英文,具体实现: 在BaseActivity中: 在 ...

  9. 【翻译】Activity

    转载请注明出处:http://blog.csdn.net/kester_/article/details/52503653 参考地址:https://developer.android.com/ref ...

最新文章

  1. mysql 常用函数循环_近30个MySQL常用函数,看到就是学到,纯干货收藏!
  2. 2018-3-27 专家系统
  3. CSS3 美女动画相框
  4. C# 语句中的各种单例模式代码
  5. Vuforia 6.1提供4个版本下载
  6. MySIAM与Innodb引擎
  7. es 同义词 热更新 1.1版本
  8. nw.js启动时白屏
  9. 计算机视觉应关注的资源
  10. matlab 棍,双足机器人行走棍图怎么用MATLAB画出来
  11. [Android开源项目] GitHub开源项目总结 (转)
  12. python max取下标_Python 变量类型总结
  13. 安卓平板微信和手机微信同时登陆_Mac电脑如何同时登陆多个微信或QQ
  14. 我的世界服务器虚拟菜单插件,《我的世界》服务器快捷菜单插件怎么用?
  15. 区块链加密算法小探(一)
  16. tornado web高级开发项目
  17. Android开发笔记1之HelloWorld
  18. 独家 | 李飞飞亲口跟我们说:离职Google是假新闻
  19. axios Post无法传递数据的解决方案
  20. 写代码如坐禅:你是哪一类程序员

热门文章

  1. 消除计算机上的静电有哪些方法,电脑有静电怎么消除
  2. cs224n学习笔记 03:Subword Models(fasttext附代码)
  3. CSDN知识库构建,我以我血荐轩辕
  4. 软件方法(下)第8章分析之分析类图—知识篇Part09-审查类和属性1
  5. sqlserver不同版本之间数据库的还原方法
  6. 场内基金和场外基金区别
  7. Python——列表的常用操作
  8. starling 笔记
  9. 网络系统结构与设计的基本原则
  10. 华远汽车递交招股书:年营收4.54亿 姜肖斐为大股东