6

私はナビゲーション・ドロワーをホストしている簡単なアクティビティを持っています。そのエントリの1つはWebViewであり、負荷がかかります(Gmailが表示されるので、厄介なリダイレクトにはかなりの時間がかかります)。NavigationDrawerから選択した場合のフラグメントの再作成を防ぐには?

異なる選択が行われた場合でも断片を保持したいと思います。私はこれらのソリューションがうまくいくと考えました。彼らはしなかった。

1)のフラグメントを再作成しない:mWebmailFragment が実際 nullでない場合でも、onCreateView()はどのような場合に呼び出されます。

2)onCreateView()が呼び出された場合、WebViewオブジェクトの状態を保持することができます。まあ、そうではありません。デバッグ私は、savedInstanceStateが、常にであることを発見しました。どうしてか分かりません。

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    // Retain instance 
    setRetainInstance(true); 

    //.... 

    // SavedState 
    if (savedInstanceState != null) { 
      mWebView.restoreState(savedInstanceState); 
    } else { 
     // do stuff 
    } 
} 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mWebView.saveState(outState); 
} 
+0

フラグメントを別のフラグメントに変更するにはどうすればよいですか?それらを "置き換える"場合は、代わりに "show()"と "hide()"を試してみてください。 – Maximosaic

+0

あなたはこれまでの解決策を見つけましたか? –

+0

いいえ...私は「すべてを隠す」ロジックを使っていましたが、向きが変わったときにもすべてがうまくいきます。当分の間、私はポートレートモードでUIを強制的に解決しましたが、どれくらいの限界があるかを理解することができます。 – Gianluca

答えて

0

私はhide/showを正しく使用していないと思います。フラグメントトランザクションでは、replace()の代わりにadd()を使用してフラグメントをロードします。

変更この

final FragmentManager myFragmentManger = myContext 
        .getSupportFragmentManager(); 
      final FragmentTransaction myFragmentTransaction = myFragmentManger 
        .beginTransaction(); 
      myFragmentTransaction.replace(R.id.content, aFragment, 
        aFragmentTag.getFragment()); 

フラグメントの

あなたは置き換える使用している場合
final FragmentManager myFragmentManger = myContext 
        .getSupportFragmentManager(); 
      final FragmentTransaction myFragmentTransaction = myFragmentManger 
        .beginTransaction(); 
      myFragmentTransaction.add(R.id.content, aFragment, 
        aFragmentTag.getFragment()); 

、CREATEVIEW()には、毎回呼び出されます。上記のコードのようにadd()を使用してみてください。

関連する問題