BackStackに追加しないとなぜかFragmentの背景が透過されてしまう。

投稿者: Anonymous

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

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

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

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

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

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

FragmentA_1 遷移→FragmentA_2 遷移→FragmentB_1 遷移→FragmentB_2 遷移→
FragmentB_3 戻る→FragmentA_2 戻る→
FragmentA_1 遷移→FragmentA_3 遷移→FragmentB_4

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

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

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

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

解決

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

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

回答者: Anonymous

Leave a Reply

Your email address will not be published.