gpt4 book ai didi

android - 替换没有 onDestroy 的 fragment

转载 作者:行者123 更新时间:2023-11-29 02:06:02 26 4
gpt4 key购买 nike

在我的 android 应用程序中,我有 fragment ,其中一个非常重(它从网络加载很多东西),另一个很轻(比如设置面板)。

我用这样的东西在 fragment 之间切换:

private Fragment myFragment1;
private Fragment myFragment2;
......
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.main_fragment, myFragment2);
ft.commit();

我的问题是,当它被替换时,它会进入 fragment 的 onStop() 和 onDestroy() 。而且因为我没有在 onDestroy() 中释放我的重物,所以我有一个很大的内存泄漏......

我想将所有 fragment 保存在内存中,并且只在屏幕上显示/隐藏它们。最好在屏幕之间快速切换,而不必每次都加载所有内容。

所以,问题是:如何更改我的代码以将所有 fragment 保存在内存中?我想要像这样的东西:

Fragment1.onPause();
Fragment2.onResume();

而不是:

Fragment1.onPause();
Fragment1.onStop();
Fragment1.onDestroy();
Fragment2.onCreate();
Fragment2.onResume();

还有一件事,我在 android 2.2 及更高版本上使用 android.support.v4.app.Fragment。

非常感谢!

编辑 1:

我找到了一些帮助并完成了这个功能:

private void changeFragement(Fragment f, String fragmentTag) {
try {
if (f != null && fragmentTag != null) {

fm = getSupportFragmentManager();
ft = fm.beginTransaction();
Fragment currentFragment = fm.findFragmentById(R.id.main_fragment);
if (currentFragment != null)
ft.hide(currentFragment);

Fragment cachedFragment = fm.findFragmentByTag(fragmentTag);
if (cachedFragment == null)
ft.add(R.id.main_fragment, f, fragmentTag);
else
ft.show(f);

/*Fragment cachedFragment = fm.findFragmentByTag(fragmentTag);
if (cachedFragment == null)
cachedFragment = f;
ft.replace(R.id.main_fragment, cachedFragment, fragmentTag);*/

ft.addToBackStack(null);
ft.commit();

}
} catch (IllegalStateException err) {
}
}

问题是 fragment 没有很好地替换,我不明白“ft.addToBackStack(null);”...你能帮我更正这段代码吗?

最佳答案

你不能。 Android 处理 Activity 、服务等的生命周期……包括 fragment 。您需要重新考虑自己的做法。

我知道文档中有关于“背景” fragment 的内容。也许您可以在那个 fragment 中进行加载并与您显示/隐藏的其他 fragment 共享一些状态?

关于android - 替换没有 onDestroy 的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9996660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com