【#Android】Fragment中のTextureViewにて表示不具合でえらい目にあった
関連記事
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
- さすがに激務すぎ,ワロタ! 【2024年12月25日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
- 【#Kotlin】「ことりん」な実装依頼がキター 【2024年10月17日(木)】
謎の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/1/13)
【#大雪】宮崎市に降雪予報キター(25/1/11)
【#2025】あけおめ~ 2025年が始まったらしい...ドロドロドロ
2024年が終わりますなぁ 1年ありがとうございました
ついに宮崎市も氷点下気温キター(24/12/23)