我有一个基本上可以正常工作的 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/