保持されたフラグメントであるマネージャークラスがあり、保持されていないフラグメントとこのフラグメントの AsyncTasks を保持しています。
画面の回転後、新しいフラグメントと実行中/終了済みのタスクを相互にリンクし、タスクによって提供されたデータでフラグメントを更新したいと考えています。
保持されたフラグメントには、次のコードがあります。
@Override
public void onAttach(Activity activity)
{
mFragStatePagerAdapter.update(activity.getSupportFragmentManager());
Debugger.Debug(DEBUG, getClass(), "ON_ATTACH_0: parentActivity: {" +
(activity != null ? activity.hashCode() : "NULL") + "}");
for (int i = 0; i < mFragStatePagerAdapter.getFragmentListSize(); i++)
{
Frag f = mFragStatePagerAdapter.tryGetItem(i);
if (f != null)
f.onAttach(activity);
// alternatively I tried following as well
// if (f != null)
// activity.getSupportFragmentManager().beginTransaction().attach(f).commit();
Debugger.Debug(DEBUG, getClass(), "ON_ATTACH_1: this: " +
this.hashCode() + " fragment: " + f + ",
parentActivity: {"+ (f.getActivity() != null ? f.getActivity().hashCode() : "NULL") + "}");
}
for (int i = 0; i < mTasks.size(); i++)
{
if (mTasks.get(i) != null)
{
Frag f = getFragment(i);
mTasks.get(i).attach(f, mTaskCallbacks.get(i));
if (mTasks.get(i).getStatus() == Status.FINISHED)
mTasks.get(i).deliverResult();
}
}
super.onAttach(activity);
}
説明のために:
- Frag... Fragmentを拡張したクラスです
- mFragStatePagerAdapter... インデックスでフラグメントを取得する機能を備えた拡張 FragmentStatePagerAdapter です...
今、私の問題は次の(短縮された)デバッグ出力です:
ON_ATTACH_0: 親アクティビティ: {1123400376}
ON_ATTACH_1: これ: 1121944544 フラグメント: ExerciseViewFragment{42e2da98}、parentActivity: {NULL}
では、なぜ を呼び出した後 、 null が返さf.onAttach(activity)
れるのでしょうか? 拡張フラグメント クラスでf.getActivity()
オーバーライドしていないため、これが理由になることはありません...onAttach