【#Android】Fragment中のTextureViewにて表示不具合でえらい目にあった
関連記事
- Oracleのライセンスモデル変更によりJavaのコストが急増する可能性 【2023年04月06日(木)】
- 次期 #Android ではスマホで衛星と通信する――グーグル幹部がツイート 【2022年09月02日(金)】
- 【独自】3ヶ月で壊れる格安スマホ「AQUOS sense5G」不具合をシャープが認めて謝罪 【2022年01月25日(火)】
- 【#デジタル庁】新型コロナワクチン接種証明書アプリ:69900エラー出て証明書が表示されない(怒 【2021年12月20日(月)】
- 【Log4j】ログ管理ソフトに欠陥、Amazonなど調査(21/12/14) 【2021年12月14日(火)】
謎の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); } } }
コメント
電子レンジが不調になったヤバス
【#地震】霧島山で有感地震 生駒高原のあたりか?(24/9/6)
奄美大島のマングース 環境省が根絶宣言
生ぬるい西風が吹いてるのぉ.大陸気団の南下はまだかっ!
【#台風】台風10号:台風に関する特別警報 発令予告が出た!鹿児島,宮崎(24/8/28)
【#台風】#台風10号:屋久島に線状降水帯が発生(24/8/28)
【#台風】養生テープ貼った(2年ぶり3回め)柿ピーも買ってきた!
今日も体調が悪いの.暑くないのに汗が酷い