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);
    }
  • 相关阅读:
    图形验证码---pillow
    vue富文本编辑器vue-quill-editor
    django邮件发送
    Django REST Framework JWT
    jwt验证
    使用django的用户表进行登录管理
    [转]CSRF漏洞详细说明
    Django框架10
    Django框架09
    Django框架08
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5586637.html
Copyright © 2011-2022 走看看