java - fragment 未附加到 Activity,在 onResume 中

标签 java android android-fragments retrofit

我有一个基本上可以正常工作的 fragment 。在 onResume 方法中,当用户进入 Activity/fragment 时,我执行 api 调用以获取新数据。

public void onResume(){
    super.onResume();

    //in pseudo
    do async call 
       success callback
          update ui

       failure callback
          update ui
}

这在大多数情况下都可以正常工作。但是,当用户在更新 ui 方法完成之前导航回父 Activity 时,我遇到了一个问题。更新 ui 只是设置了一些 TextView 。

例如当用户导航到 Activity 和 fragment 时,上面的 onResume 被调用。用户立即返回父 Activity 。异步调用和更新 ui 尚未完成,我得到:

FATAL EXCEPTION: main Process: com.project.foobar, PID: 4405 java.lang.IllegalStateException: Fragment MyDetailFragment{41ebb478} not attached to Activity

成功回调后在update ui方法中抛出。我使用 Square 的改造来管理 api 调用。同样,这只会在更新 ui 尚未完成时发生。当我等待它完成并返回时,一切都很好。

任何想法可能是错误的?

最佳答案

要么在离开 fragment 时中止异步操作,要么在尝试更新 UI 时简单地检查 fragment 是否仍附加 isAdded()。如果未附加,请忽略结果并且不要触摸 View 。

第一个选项可能是最正确的,但也是最难实现的。 在我看来,第二个选项非常好,除非你在后台线程中做一些非常繁重且长时间运行的事情。

关于java - fragment 未附加到 Activity,在 onResume 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294477/

相关文章:

java - 列表打印为空

java - Dropwizard/Jersey 为资源返回 204

java - Android 如何播放 Assets 文件夹中的媒体文件 (.mp4)

java - 博弈树转置表(连接4)

Android Viewpager.setCurrentitem() 和 FragmentPagerAdapter instantiateItem() fragment 初始化不匹配

android - 当我弹出 BackStack 时,自定义 fragment 过渡动画无法正确播放

java - 安卓工作室 |如何使用 On Click 在 fragment 和 activity 之间切换

java - 需要变压器功能

java - 如何从 RTSP 消息的内容中提取 session ID?

android - clickView如何正确使用?