タブレット用プログラムの書き止め

android OS & iPadOS の記録。

fragment は部品

2021-07-13 11:39:40 | Android studio 日記

 fragment はウィンドウの代わりになるんじゃないかと誤解が続いていた。フラグメントはウィンドウの装飾品であり、ウィンドウ全体を覆い隠してウィンドウの振りをしても下にある部品の存在は消せない。タップ処理では下にある部品の影響を受ける。

 今は、Activity に画像を表示してタップ処理をしている。フラグメントを全体に広げてリストを何列も表示したとする。リストをスライド、タップをすると下の画像にもタップ処理が加わり変化が起こってしまう。Activity でディスパッチや GestureDetector を利用しているためではないか。onTouch() の戻り値に true を返していても下の画像で処理が行われる。scrollView は作動してない。

 別の方法で下の画像への処理を止められないかを考えた。フラグメントへ移動時に画像を setVisibility(View.GONE) で存在を亡き者にすれば、処理しないのでは?フラグメントから戻ってきたら、setVisibility(View.VISIBLE) で復活させる。ん?フラグメントへの移動は分かるが帰ってくるタイミングは分からない。フラグメントで作業していても下の画像でも作業が行われている。(フラグメントの xml で android:alpha="0.5" を設定すると半透明になり、下の画像の動作が確認できる)

 フラグメントに View を渡して戻る時に view.setVisibility(View.VISIBLE) ?・・結構面倒くさい。フラグメントは決まったものが2つ、排他的で複数表示しない、1つが表示か、全部消えている。全部消えているときに画像操作するとか、か。何かしらフラグメントが表示しているときは下の画像操作できなくするのが良いのか・・。

 で、フラグメント関連メソッド等を調査したら見つけた。
List<Fragment> list = getSupportFragmentManager().getFragments();
FragmentTransaction で加えられたフラグメントをリストアップするメソッド。リスト形態なので、list.isEmpty() が使える。下の画像で操作して欲しくないタップ処理は、list.isEmpty() の状態で判別。小さいプログラム、拡張も考えていない、ので、簡単だし、結果は十分だ。

 とりあえず、何でもやってみる。