android - 你能在 onDestroy() 中分离一个 fragment 吗?

标签 android

这是我遇到的问题。我有一个 Activity A,它有一个 fragment F,它包含在 View V 中的 FragmentPagerAdapter FPA 中。 (A->V->FPA->F)

当 A 被销毁(或者在这种情况下,换出)时,F 被附加,并且在 FPA 中,而 FPA 在 V 中。但是,当 A 被重新创建时(例如,有人点击后退按钮回到 Activity 中), V 和 FPA 不存在,所以 F 被重新创建(在附加状态!),但是对于不存在的东西,所以它根本不在 View 层次结构中。然后,当 FPA 尝试在这个 fragment 上实例化状态时,它会尝试附加它,这什么都不做,因为它已经附加到稀薄的空气中。

显然有几种方法可以解决此问题(例如,在 Activity 的 onCreate 中存在 V 和 FPA,以便 fragment 在创建时有地方可去),但我想继续懒惰仅在需要时创建 FPA 和 V。

因此,在 onDestroy() 中将 F 的状态更新为 detached 似乎是可取的。但是,状态保存在 onPause() 中,这意味着我有点不走运。

有没有办法在A的onDestroy()中更新F的保存状态?有没有办法说“如果 Activity 被破坏,不要再水化这个 fragment ”?有没有其他一些我没有考虑的明显的思考方式?感觉我在这里做事的方式是错误的。

最佳答案

我在使用 FragmentPagers 时遇到了麻烦。我所做的是在 Activity onCreate() 中传递一个空包,然后在每次创建时从头开始创建所有内容。像这样:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    // do my stuff
}

这样,当重新创建 Activity 时, fragment 就不会被传递。

关于android - 你能在 onDestroy() 中分离一个 fragment 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13639214/

相关文章:

android - Eclipse 在创建新项目/Activity 时表现不同

Android:除了 Location.getAltitude() 之外,还有其他获取高度的方法吗? (我听说过使用传感器)

java - 由 : java. lang.NoClassDefFoundError: Class not found using the boot class loader 引起;没有可用的堆栈

java - 如何使用监护人项目在android中使用FFMPEG连接视频

java - 大小为 0 的 CursorIndexOutOfBoundsException : Index 0 requested,

java - 以编程方式设置 TextView 的边距

android - ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 对部分 Android 10 设备没有影响

android - 有没有一种工具可以删除不需要的、未使用的变量

android - 将 cookie 从 native 登录传递到 webview

Android Studio 未将应用安装到设备中