【#Android】Fragment中のTextureViewにて表示不具合でえらい目にあった
関連記事
- トランプ大統領スマホも別関税課す方針“除外発表していない” 【2025年04月14日(月)】
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
- さすがに激務すぎ,ワロタ! 【2024年12月25日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
謎のAndroidスマフォな案件
動画の撮影機能も入れてね♥だったんで入れてみたら...
Fragment(Windows FormでいうTabコントロールっすな)に,TextureView(カメラからの動画をプレビューさせるコントロール)
を貼っつけて,カメラを運転させると...
タブを切り替えたら,カメラプレビューが表示されなくなるっ!(な,なんだってぇ~~~爆
っちゅうか,タブを切り替える度に,FragmentのUIインスタンス破棄動作~再作成動作「onCreateView()」が走りやがる.
カメラ運転開始時に作成登録したUIインスタンスが消失するから,カメラ取得した画像を投げつける相手がいなくなるんで,そりゃ表示されんわなぁ...
ってことで,TextureViewを破棄させないようにするとか,Cameraオブジェクトのプレビューを一旦停止して再作成した,TextureView.SurfaceTextureを設定してやったりしたけど,ダメ
24時間も格闘してしもた...泣
って,そもそもなして,Fragmentはタブが切り替わるたんびにUIを破棄するんじゃ?
そこが納得いかん!!と怒り狂って,あちこちチェックコードを入れたけど破棄を抑止する方法がわかんね...
ふと,Fragment群全体を束ねるクラスの実装に目が言った.こちら「TabListenerインターフェース」を実装したやつ
こやつ,タブが切り替わるたんびに,FragmentTransaction.detach()が走るなぁ...怪しぃ...
detach()の度に,UIのインスタンス破棄してるんじゃねか?
googleサイトに行ってandroidのAPIドキュメント確認したら,FragmentTransaction.hide()なるメソッドがあるじゃん…コレに変えてみたら...
タブ変えても,プレビューされ続けるぞぉ!キタ━━━━(゚∀゚)━━━━!!
ってことで,難儀したんで,ここに書いておきまする.あとから来られる人が悩まれないように...
//------------------------------------------------------------------ //タブの制御クラス // //------------------------------------------------------------------ public class MainTabListener<T extends Fragment> implements TabListener { public Fragment fragment; private final Activity activity; private final String tag; private final Class<T> cls; //------------------------------------------------------------------ //コンストラクタ // //------------------------------------------------------------------ public MainTabListener( Activity activity, String tag, Class<T> cls) { fragment = null; this.activity = activity; this.tag = tag; this.cls = cls; } //------------------------------------------------------------------ //タブのリリース // //------------------------------------------------------------------ @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } //------------------------------------------------------------------ //タブの選択 // //------------------------------------------------------------------ @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if(fragment == null) { fragment = Fragment.instantiate(activity, cls.getName()); ft.add(android.R.id.content, fragment, tag); ft.show(fragment); } else { //ft.attach(fragment); //attach-detachは再作成[onCreateView()]がここ通る度に走るっぽい ft.show(fragment); } } //------------------------------------------------------------------ //タブの非選択 // //------------------------------------------------------------------ @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { if(fragment != null) { //ft.detach(fragment); //attach-detachは再作成[onCreateView()]がここ通る度に走るっぽい ft.hide(fragment); } } }
コメント
ご近所にココイチが出来る,らしい
【梅雨】朝から大雨ぇ~ さすが梅雨じゃ(25/5/17)
今日は城主生誕記念日で日本国は祝日,らしい...
兵庫 城崎温泉 旅館で火事 ほぼ消し止められる
東海道新幹線 停電のため運転見合わせ 区間が拡大 原因調査中
【霧島山】新燃岳:活発化してた火山性地震,ピタッと止まった(25/4/26)
今日は落雷,ひょうに厳重警戒じゃげな(25/4/14)
中日本高速道路 ETCシステム障害 7都県 一部の専用レーン閉鎖(25/4/6)
iPhone米価格は相互関税で30─40%上昇か、上位機種は2300ドルも