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を作ることにしよう。