Android中getActivity()为null的解决办法
来源:互联网 发布:三星手机指南针软件 编辑:程序博客网 时间:2024/06/06 04:29
在Android开发中,在使用Fragment时,不管是用support v7中的ActionBarActivity,还是在SDk version 21出现的AppCompatActivity,都是继承自FragmentActivity,在应用被切换到后台的时候,Activity可能被回收,在回收之前都会执行FragmentActivity中的onSaveInstanceState方法保存所有Fragment的状态,如下所示。下面是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时系统会恢复之前被回收的Activity,这个时候FragmentActivity在onCreate里面也会做Fragment的恢复。
/** * Perform initialization of all fragments and loaders. */ @SuppressWarnings("deprecation") @Override protected void onCreate(@Nullable Bundle savedInstanceState) { mFragments.attachHost(null /*parent*/); super.onCreate(savedInstanceState); NonConfigurationInstances nc = (NonConfigurationInstances) getLastNonConfigurationInstance(); if (nc != null) { mFragments.restoreLoaderNonConfig(nc.loaders); } if (savedInstanceState != null) { Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); mFragments.restoreAllState(p, nc != null ? nc.fragments : null); } mFragments.dispatchCreate(); }
这里我的解决方法是在恢复Fragment之前把保存Bundle里面的数据给清除。赶在Activity恢复其之前所绑定的Fragment之前清除所有存储在savedInstanceState中的信息。方法如下:
if (savedInstanceState != null) { savedInstanceState.putParcelable("android:support:fragments", null); //或者 //String FRAGMENTS_TAG = "Android:support:fragments"; // remove掉保存的Fragment // savedInstanceState.remove(FRAGMENTS_TAG); } super.onCreate(savedInstanceState); activity中@Override protected void onSaveInstanceState(Bundle outState) { //super.onSaveInstanceState(outState); }
第二种
fragment
@Override public void onAttach(Activity activity) { super.onAttach(activity); mCtx = activity;//mCtx 是成员变量,上下文引用 } @Override public void onDetach() { super.onDetach(); mCtx = null; }
阅读全文
0 0
- Android中getActivity()为null的解决办法
- Android中getActivity()为null的解决办法
- Fragment中调用getActivity为null的解决办法
- Fragment中getActivity为null的问题
- Android填坑之旅(第二篇) 关于Fragment中getActivity为Null的问题
- Android 那些年,处理getActivity()为null的日子
- Android 那些年,处理getActivity()为null的日子
- Fragment中调用getActivity为null的问题
- 关于Fragment中getActivity为Null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity为null的问题
- 关于Fragment中getActivity为Null的问题
- Fragment中调用getActivity概率性为null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity()为null的问题
- 关于Fragment中getActivity为Null的问题
- 阿里妈妈MaxCompute架构演进_-_AON(MPI)集群
- 欢迎使用CSDN-markdown编辑器
- 通达OA二次开发 小飞鱼应用OA工作流二次开发智能公文系统(三)(图文)
- Ubuntu16.04安装Redis
- 几种简单的负载均衡算法及其Java代码实现
- Android中getActivity()为null的解决办法
- 参数缺省,引用
- c#中的wpf只用代码创建wpf应用程序
- 关于IntelliJ IDEA的workspace.xml在git 中无法忽略Ignore的解决方案
- 彻底搞懂Oracle的左外连接和右外连接(以数据说话)
- 系统重装不了的N种情况以及解决方法
- 为什么会这么痛苦,原因是......
- [JAVA学习笔记-72]关于Priority Inversion
- 应用签名不一致,该应用可能被篡改的问题