2012-04-03 20 views
2

私のアンドロイドアプリでは、フラグメントがあり、そのうちの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); "... このコードを修正する手助けをしてもらえますか?

答えて

1

できません。 Androidは、Fragmentsを含むアクティビティ、サービスなどのライフサイクルを処理します。 あなたはそれをやっていると再考する必要があります。

文書に「背景」の断片があることは知っています。たぶんあなたはその中の読み込みを行い、表示/非表示の他のフラグメントといくつかの状態を共有できますか?

+0

oups、私は最初の投稿を編集します... – Niko

関連する問題