Fragment を重ねて画面遷移させたときに、後ろのFragmentのタッチイベント発生を防ぐ方法の紹介です.
1.問題
後ろに隠したFragmentまでタッチイベントが伝播してしまうのは、このような実装をしているときです.
1 2 |
mFragmentManager.beginTransaction() .add(R.id.container, webFragment, mTag).commit(); |
webFragmentというFragmentに遷移していますが、この遷移後の画面をタッチしたときに、元の画面のタッチイベントが呼ばれるときがあります.
2.解決法
1)addを利用しない
1 2 |
mFragmentManager.beginTransaction() .replace(R.id.container, webFragment, mTag).commit();//addの代わりにreplaceを利用 |
addの代わりにreplaceを利用することでこの問題は回避できます.
但し、元のFragmentに戻るとOnCreateから再実行することになるので、生成にコストの掛かるFragmentの場合この方法は利用できません.
2)clickableを設定する
追加したFragmentのレイアウトにclickableを設定します.
1 2 3 4 5 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:clickable="true" > |
ここではLinearLayoutを利用していますが、Fragmentの全体を覆っているLayoutであれば何でもかまいません.
このLayoutに android:clickable=”true” を設定することで、これより下にはタッチイベント(およびクリックイベント)が伝播しなくなります.