在我的Android應用程序中,我有片段,其中一個非常沉重(它從網上加載了很多東西),另一個是輕的(如設置面板)。替換一個片段沒有onDestroy
我的東西片段之間切換這樣的:
private Fragment myFragment1;
private Fragment myFragment2;
......
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.main_fragment, myFragment2);
ft.commit();
我的問題是,它會在的onStop()和片段的onDestroy()時,它的beeing更換。 而且因爲我不釋放我的沉重的onDestroy東西()我有一個大的內存泄漏...
我想保持在內存中我所有的碎片,只顯示/從屏幕上隱藏起來。 這將是一個很好的做一個快速切換屏幕,而不是每次加載一切。
因此,問題是: 如何更改我的代碼以將所有片段保留在內存中? 我想有sonething像:
Fragment1.onPause();
Fragment2.onResume();
而不是:
Fragment1.onPause();
Fragment1.onStop();
Fragment1.onDestroy();
Fragment2.onCreate();
Fragment2.onResume();
還有一兩件事,我用android.support.v4.app.Fragment在Android 2.2及以上。
非常感謝!
編輯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) {
}
}
的問題是,碎片沒有得到很好的替代,我不明白逢的「FT .addToBackStack(null);「... 你能幫我糾正這段代碼嗎?
oups,我會編輯我的第一篇文章... – Niko 2012-04-03 16:29:29