私のアンドロイドアプリでは、フラグメントがあり、そのうちの1つが非常に重い(ウェブから多くのものを読み込みます)、他は軽い(設定パネルのような)ものです。はonDestroyのないフラグメントを置き換えます
私はこのような何かを有する断片を切り替える:
private Fragment myFragment1;
private Fragment myFragment2;
......
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.main_fragment, myFragment2);
ft.commit();
私の問題は、それが置き換えbeeingていたときに、それはonStop()とフラグメントのonDestroy()に入るということです。 そして私はonDestroyで私の重い低いものを()私は大きなメモリリークを持って...解放されないため
私は/メモリ内のすべての私の断片、とだけのショーを保つ画面からそれらを隠したいです。 毎回すべてをロードせずに、画面の高速切り替えを行うとよいでしょう。
質問: 私のコードをすべて変更してメモリに保存するにはどうすればよいですか? 私は次のようにsonethingているしたいと思います:
Fragment1.onPause();
Fragment2.onResume();
そしてません:
Fragment1.onPause();
Fragment1.onStop();
Fragment1.onDestroy();
Fragment2.onCreate();
Fragment2.onResume();
もう一つは、私はアンドロイド2.2、より上のandroid.support.v4.app.Fragmentを使用しています。
ありがとうございます!
EDIT 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) {
}
}
、私は「フィートWEL理解していません.addToBackStack(null); "... このコードを修正する手助けをしてもらえますか?
oups、私は最初の投稿を編集します... – Niko