美文网首页
问题解决:Fragment not attached to Ac

问题解决:Fragment not attached to Ac

作者: 禄子_c79b | 来源:发表于2018-11-15 09:58 被阅读0次

    1、问题引入

    在Fragment中执行一段耗时任务,在任务未结束的时候,重建Activity就会导致getActivity()为null,所有用到getActivity()的地方都会引起空指针异常,如果使用了getResources()方法,就会导致Fragment not attached to Activity。

    2、问题解决

    将FirstFragment中onPostExecute()方法中的
    tvMsg.setText(getResources().getString(R.string.app_name));

    改为
    if (isAdded()) {
    tvMsg.setText(getResources().getString(R.string.app_name));
    }
    2或者用getContext()代替

    3在Fragment基类里设置一个Activity mActivity的全局变量,在onAttach(Activity activity)里赋值,使用mActivity代替getActivity(),保证Fragment即使在onDetach后,仍持有Activity的引用(有引起内存泄露的风险,但是异步任务没停止的情况下,本身就可能已内存泄漏,相比Crash,这种做法“安全”些),即:
    protected Activity mActivity;
    @Override
    public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.mActivity = activity;
    }

    /**

    • 如果你用了support 23的库,上面的方法会提示过时,有强迫症的小伙伴,可以用下面的方法代替
      */
      @Override
      public void onAttach(Context context) {
      super.onAttach(context);
      this.mActivity = (Activity)context;
      }
      https://www.jianshu.com/p/d9143a92ad94

    isAdded()方法可以判断当前的Fragment是否已经添加到Activity中,只有当Fragment已经添加到Activity中时才执行getResources()等方法。
    另请参考:http://stackoverflow.com/questions/10919240/fragment-myfragment-not-attached-to-activity

    当然,以上只是引起该异常的一个例子,并不能解决所有“Fragment not attached to Activity”的问题。

    作者:独毒火
    链接:https://www.jianshu.com/p/7986206aa9d4
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

          本文标题:问题解决:Fragment not attached to Ac

          本文链接:https://www.haomeiwen.com/subject/cwmefqtx.html