12331


現在作っているアプリには1つのActivityと複数のFragmentがあります。  
Fragmentの切り替えはActivityから主に以下のようにして行っています。

[code]

    FragmentManager fragmentManager=getFragmentManager();
    FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.replace(R.id.container,fragment);
    fragmentTransaction.commit();
    
[/code]

そして、Androidの戻るキーで前のFragmentへ戻れるようにonBackPressedを以下のように書いています。

[code]

    @Override
    public void onBackPressed() {
        FragmentManager fragmentManager = getFragmentManager();
        if (fragmentManager.getBackStackEntryCount() > 0) {
            fragmentManager.popBackStack();
            return;
        }
        finish();
    }
    
[/code]

以下の説明において、FragmentAはWebView・FragmentBはListViewです。  
(アプリには他にもFragmentがありますが、今回の説明で不要なので省きます。)  
ListViewにも複数のページがあり、何ページへ行っていてもWebViewへ戻れるようにしたいので、  
~~FragmentBは~~ FragmentB_2〜(ListViewの2ページ目以降)はBackStackへ追加しないようにしています。

今回以下のような移動をしたところ、FragmentB_4の背景が透過されて下にFragmentA_3が見えてしまいました。

[code]

    FragmentA_1 遷移→FragmentA_2 遷移→FragmentB_1 遷移→FragmentB_2 遷移→
    FragmentB_3 戻る→FragmentA_2 戻る→
    FragmentA_1 遷移→FragmentA_3 遷移→FragmentB_4
[/code]

FragmentB_4を表示している時に戻るキーを押すとFragmentA_3が表示されて欲しいのですが、  
この状況ですとなぜか押した時にFragmentA_1が表示されます。  
FragmentAはWebViewをフルで表示しているからか背景の透過は見られません。

xmlでFragmentBの背景色を指定すると、上の流れでFragmentB_4を表示した時に背景の透過は見られませんが、やはり戻るキーを押すとFragmentA_1が表示されます。

FragmentBをBackStackに追加するようにすれば表示は特に問題はないのですが、  
仕様上FragmentBでページ移動した分戻らないとFragmentAが表示されないというのが不便なのでBackStackには追加したくないと考えています。

どうすればやりたいようなことができるでしょうか？


CC BY-SA 3.0
2015-07-09T10:49:18.887
12211
2015-07-14T02:33:24.747
2015-07-14T02:19:45.837
9710
9710
question
android android-fragments
BackStackに追加しないとなぜかFragmentの背景が透過されてしまう。


解決できたので回答に書きます。

FragmentAをBackStackに追加する時にタグを追加し、  
FragmentB_2〜戻る時に`FragmentManager#popBackStack(String,int)`を使うことによってやりたいことができました。


CC BY-SA 3.0
2015-07-14T02:33:24.747
12331
2015-07-14T02:33:24.747
9710
12211
answer