すげー微妙だなこのreplaceメソッド・・・
僕はsupport v4ライブラリではなく、android.app.パッケージにあるやつを使ってます。で、fragmentをreplaceしようとしたら、replaceする度にスタックが上に積み上がり画面がどんどんオーバーレイしていくというよくわからない状態になってしまいました。
//こうやるとオーバーレイ(重なってしまう)
getFragmentManager().beginTransaction()
.replace(R.id.fragment01, newFragment)
.commit();
確認してないけど、多分こーゆーのってTapのイベントを拾った場合は後ろに隠れているFragmentもTapイベントのリスナーを実装してる場合は拾っちゃう気がする。GUIアプリってそーゆーもん。
ドロワーから選択するときに選択されたポジションによってfragmentを切り替えたいだけなので、Fragmentを追加する時にタグを仕込んで、仕込んだタグでremoveしてからaddすればいいという結論に達しました。
Fragment fragment; switch (position) { case 0: fragment = new AFragment(); break; case 1: fragment = new BFragment(); break; case 2: fragment = new CFragment(); break; default: break; } String newTag = Integer.toString(position); Fragment current = fragmentManager.findFragmentByTag(currentFragMentTag); //タグで現在のfragmentを取得して消して、新しいタグを追加して常に1個の //Fragmentのremove/addにする fragmentManager.beginTransaction() .remove(current) .add(R.id.mainlayout,fragment,newTag) .commit(); currentFragMentTag = newTag; }
currentFragMentTagはActivityのStringのメンバ変数です。onCreateとかでFragmentを突っ込む時に0で初期化しておいた。面倒いからポジションをそのままTagにした。これで今の所大丈夫そう。当方Android暦が現時点で延べ1週間ぐらいなので、難しいことはワカンネ。