【#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);
}
}
}

コメント
【クマ】クマによる人的被害、生活圏7割 環境省まとめ、出没は最多2万件
「ニュウハクシミ」紙を食べる害虫 生息19都道府県に拡大
文化の日な祭日らしい.文化的に休むもうず?
【#HTVX】新型宇宙輸送船HTV-X 油井さんがロボットアームでキャッチ
【冬】来週11℃予想とか出てきてる.秋があったのか,今年(25/10/23)
【ツル】出水平野に冬の訪れを告げるツル第一陣・今季初飛来 鹿児島(25/10/21)
都城でプロ野球・ロッテ1軍が春季キャンプ実施へ
山形で開催の映画祭 監督など国内外の参加者が“芋煮”味わう
連休なんで生駒高原でコスモスを愛でてきた
連休の中日ですの.天気は良くなる方向じゃげ