2017-06-08 32 views
0

私は私のプロジェクトで5つの異なる断片を持っています。 AとBは、ユーザーがアプリを開いたときにのみ表示されます。それらは読み込み画面(現在のログインセッションを確認する)とログイン画面そのものを表示します。フラグメントCは、ユーザーがアプリケーションの他の領域にアクセスするために使用できるアプリケーションのメイン画面です。このため、トランザクションDが作成/コミットされたときにフラグメントDとEは "addToBackStack(String)"を余分に取得しました。Android - 白い画面になるフラグメントバックスタック

空白の画面になっている私の問題は、ユーザーがDまたはEを開いてCに戻ったときです。このアクションは、最初にCの空白の画面になるか、その手順を何度かやり直すことができます。

関連するフラグメントC、D、Eは、ビューホルダー、データバインディングおよびリサイクルビューを使用しています。各リサイクラビューには複数のビュータイプがあります。

onBackPressedからCへは正しく実行されていますが、Cはキャッシュなどから削除されているようです。

誰もが私にその問題を助けてくれることを願っています。

+0

https://stackoverflow.com/questions/18305945/how-to-resume-fragment-from-backstack-if-exists :まだ、これをさらにテストする必要がありますが、今のところ動作しているようですこれはバックスタックシステムを理解するためのものです –

+0

私はすでにそのエントリを読んで、私の問題を解決するのに役立たなかった。 – Mordag

答えて

0

私の問題の解決策が見つかりました。確認してください

private void showFragment(Fragment fragment, String tag, String backStackTag) { 
    FragmentTransaction ft = fragmentManager.beginTransaction(); 

    if (backStackTag != null) { 
     ft.addToBackStack(backStackTag); 
    } 

    switch (tag) { 
     case "A": 
     case "B": 
      ft.replace(containerId, fragment, tag); 
      break; 
     case "C": { 
      Fragment main = fragmentManager.findFragmentByTag("C"); 
      if (main != null) { 
       ft.show(main); 
      } else { 
       ft.replace(containerId, fragment, tag); 
      } 
      break; 
     } 
     case "D": 
     case "E": { 
      Fragment main = fragmentManager.findFragmentByTag("C"); 
      ft.hide(main); 
      ft.add(containerId, fragment, tag); 
      break; 
     } 
     default: 
      ft.add(containerId, fragment, tag); 
      break; 
    } 

    ft.commit(); 
} 
関連する問題