美文网首页Android爬坑记
DialogFragment 报错汇总

DialogFragment 报错汇总

作者: 葛糖糖 | 来源:发表于2017-12-07 16:41 被阅读31次

最近在降低项目总体错误率,发现有一些dialogFragment报了几个active、already added的错误,就修复了一波.

Fragment already active

错误日志

这是Fragment调用setArguments()方法时报的错误.原因是当Android堆栈正在删除Fragment而删除操作没有完成时,也就是Fragment仍保持active又被重新调用了setArguments()方法,常见操作是快速连续点击调用这个Fragment的操作.
解决方法:使用Fragment的isRemoving()方法来判断该Fragment是否还存在堆栈中,如果true,那么Fragment依然active,那么可以采取复写相同地址下的Arguments来解决;如果false,那么说明Fragment not active,可以直接调用setArguments()见下面代码.

if (fragment.isRemoving()) {
    fragment.getArguments().putAll(bundle);
} else {
    fragment.setArguments(bundle);
}

如果是全局的dialogfragment,可以通过判断dialogFragment是否为null来设置.

Fragment already added

错误日志 出现场景:
Fragment:快速双击调用FragmentTransaction.add()方法添加fragment,而fragment不是每次单独生成的,就会引起这个异常。
DialogFragment:快速点击呼起dialogFragment的按钮,因为
DialogFragment.show()内部调用了FragmentTransaction.add()方法,所以调用DialogFragment.show()方法时候也可能会出现这个异常。
解决方法:
Fragment:在add()方法时候,先判断fragmentA.isAdded(),如下调用可以避免该异常:
if(!fragmentA.isAdded()){
        FragmentManager manager =getFragmentManager();
        FragmentTransaction ft = manager.beginTransaction();
        ft.add(fragment, "tag");
        ft.commit();
}

DialogFragment:重写show方法,根据tag来获取fragment进行判断.

@Override
public void show(FragmentManager manager, String tag) {
    Fragment fragment = manager.findFragmentByTag(tag);
    if (fragment == null || !fragment.isAdded()) {
        super.show(manager, tag);
    }
}

Fragment MyFragment not attached to Activity

出现该异常,是因为Fragment的还没有Attach到Activity时,调用了如getResource()等需要上下文Context的方法。
解决方法:
1.将调用的这些方法写在OnStart()中。
2.在调用:getResources().getString(R.xx.xxx); 之前增加一个判断isAdded();

不喜请轻喷,毕竟我是一个渣渣.

相关文章

  • DialogFragment 报错汇总

    最近在降低项目总体错误率,发现有一些dialogFragment报了几个active、already added的...

  • DialogFragment Navigation 使用

    DialogFragment Navigation 用Navigation组件弹出DialogFragment 在...

  • 报错汇总

    正式环境提示no defined method status ,发现job表里没有status字段 执行RAILS...

  • 报错汇总

    Error:Execution failed for task ‘:app:mockableAndroidJar’...

  • Android 日记本

    一、DialogFragment的使用: DialogFragment 是来自 android.support.v...

  • 2020-01-06

    不写无参构造函数会发生什么? 答:会报错,如写了dialogfragment的有参构造函数却没有写无参构造函数,恢...

  • DialogFragment使用小结

    前言 DialogFragment什么鬼?什么DialogFragment,不就是Dialog和Fragment配...

  • DialogFragment 替代Dialog

    DialogFragment 基于Fragment的DialogFragment。 从代码的编写角度看,Dialo...

  • DialogFragment

    一、Dialog和DialogFragment DialogFragment让dialog也变成了碎片,相比之前来...

  • Android UI篇——DialogFragment系列二之D

    《DialogFragment系列一之源码分析》《DialogFragment系列二之Dialog封装》《Dial...

网友评论

    本文标题:DialogFragment 报错汇总

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