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

android OS & iPadOS の記録。

Fragment [基礎] Fragment Mainから Fragment Subへ。

2022-09-26 23:31:48 | Android studio 日記

フラグメントMain→ Sub→ Main→ Sub と切り替え。
推奨方法は分かりづらいので直感的に操作する。

Main→ Subの時は、Mainを終わらせ、値も渡しSubを開く。

getParentFragmentManager().beginTransaction().remove(this).commit();//自身を終了。

onDestroy()が終了直前で呼ばれるのでFragment Subを設定してフラグメントを開く。


Sub→ Mainも同じ方法。

フラグメントを切り替えた時の下に隠れたフラグメントをどうしても消したかった。


public class MainFragment extends Fragment implements View.OnTouchListener {

    class MyGestureListener extends SimpleOnGestureListener {
        @Override
        public boolean onDoubleTap(MotionEvent event) {//ダブルタップしたらフラグメント切り替え
            changeFragment();
            return true;
        }
        //一部省略
    }

    //一部省略

    private void changeFragment() {
        getParentFragmentManager().beginTransaction().remove(this).commit();//自身を終了
    }

    @Override
    public void onDestroy() {//自分が消えるタイミングでサブフラグメントを開く

        SubFragment mFragment = SubFragment.newInstance("filepath");//サブフラグメントを設定
        View view = (View) requireActivity().findViewById(R.id.container);
        view.setOnTouchListener((SubFragment)mFragment);

        FragmentManager fragmentManager = getParentFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.container, mFragment);
        fragmentTransaction.commit();

        super.onDestroy();

        //一部省略
    }
}

どうなんだろう?
ま、いっか。

 

追記

fragmentTransaction.replace() は、現在のフラグメントを終了させて新しいフラグメントを開始する。
だ。そうorz...

developerの自動翻訳のページでは"置き換える"なんだけど...。
英文から真意を読み解く事はできないので...。
getFragments() で数を調べればいいのか?
別件だけど、fragmentTransaction.replace()の引数にBundleも付けられるみたい。
両方確認だ。

再追記

onViewCreated()の中でgetFragments().size()を実行、フラグメントの数を調べると数は(1)。
フラグメントを切り替えても1のままである。
replace()を使うと現フラグメントを消して新しいフラグメントを作成している。確定。

ディレクトリの移動用フラグメントでBundleを使ってList<>を渡すので後でチェック。