UIを持たないFragment その3

FragmentTransaction登録直後に追加したはずのFragmentが取得できない件に関してはFragmentManager#executePendingTransactionsを使うことで同期することを確認、解決した。

上記問題が解決しなかった時点ではActivity側で制御していたFragmentManagerへの登録に関してFragment側がActivityに自己登録するようにコンストラクタを書き換える。 UIの無いFragmentは名前でFragmentManagerに登録することになるため、クラス毎に1インスタンスであることを前提にするのであれば自身のクラス名を使って自己登録しても実用上問題は無いだろう。

  • NfcFeliCaTagFragment.java
    public NfcFeliCaTagFragment(FragmentActivity activity) {
        registerFragment(activity, NfcFeliCaTagFragment.TAG);
    }
    
    protected void registerFragment(FragmentActivity activity, String tag) {
        FragmentManager fm = activity.getSupportFragmentManager();
        Fragment fragment = fm.findFragmentByTag(tag);
        if ( fragment != null ) {
            FragmentTransaction  trans = fm.beginTransaction();
            {
                trans.remove(fragment);
            }
            trans.commit();
            fm.executePendingTransactions();
        }
        FragmentTransaction  trans = fm.beginTransaction();
        {
            trans.add(this, TAG);
        }
        trans.commit();
        fm.executePendingTransactions();
    }

又、この後でISO15693を処理するためのFragmentを書くことが決まっているため、本クラスからSuperClassを抽出して、AbstractNfcTagFragmentを作ることにしよう。