zoukankan      html  css  js  c++  java
  • Android Fragment getActivity返回null解决

    在Android开发中,如果我们用到V4包里面的Fragment,在应用被切换到后台的时候,Activity可能被回收,但是创建的所有Fragment则会被保存到Bundle里面,下面是FragmentActivity的部分源码

    /**
         * Save all appropriate fragment state.
         */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            Parcelable p = mFragments.saveAllState();
            if (p != null) {
                outState.putParcelable(FRAGMENTS_TAG, p);
            }
        }

    如果从最近使用的应用里面点击我们的应用,系统会恢复之前被回收的Activity,这个时候FragmentActivity在oncreate里面也会做Fragment的恢复

    protected void onCreate(Bundle savedInstanceState) {
            mFragments.attachActivity(this, mContainer, null);
            // Old versions of the platform didn't do this!
            if (getLayoutInflater().getFactory() == null) {
                getLayoutInflater().setFactory(this);
            }
            
            super.onCreate(savedInstanceState);
            
            NonConfigurationInstances nc = (NonConfigurationInstances)
                    getLastNonConfigurationInstance();
            if (nc != null) {
                mAllLoaderManagers = nc.loaders;
            }
            if (savedInstanceState != null) {
                Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
                mFragments.restoreAllState(p, nc != null ? nc.fragments : null);
            }
            mFragments.dispatchCreate();
        }

    但是此时恢复出的Fragment,在调用getActivity的时候会返回null,具体什么原因还没详细研究,这里我的解决方法是在恢复Fragment之前把保存Bundle里面的数据给清除,也就是保存的Fragment信息,然后自己重新replace。方法如下:

    if(arg0 != null)
    {
         String FRAGMENTS_TAG = "Android:support:fragments";
         // remove掉保存的Fragment
         arg0.remove(FRAGMENTS_TAG);
    }
  • 相关阅读:
    [NOIP2018-普及组] 对称二叉树
    UVA1637 【纸牌游戏 Double Patience】
    [SHOI2002]滑雪-题解
    题解 CF1437E 【Make It Increasing】
    题解 P4331 【[BalticOI 2004]Sequence 数字序列】
    NOIp 2020游记
    题解 P3825 【[NOI2017]游戏】
    题解 P6453 【[LNOI2014]LCA】
    题解 P6453 【[COCI2008-2009#4] F】
    题解 P5779 【[CTSC2001]聪明的学生】
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5586637.html
Copyright © 2011-2022 走看看