我有一个管理器类,它是一个保留的片段,并且它持有这些片段的非保留片段和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的类,具有通过索引获取fragment的功能...
现在我的问题如下(简短的)调试输出:
ON_ATTACH_0: parentActivity: {1123400376}
ON_ATTACH_1: this: 1121944544 fragment: ExerciseViewFragment{42e2da98}, parentActivity: {NULL}
所以,在调用 f.onAttach(activity)
后,为什么 f.getActivity()
返回null呢?我没有在我的扩展Fragment类中重写 onAttach
,所以这不可能是原因...
activity.getSupportFragmentManager().beginTransaction().attach(f).commit();
代替它...但不幸的是,它也没有起作用...所以如果不能像那样使用onAttach
,我该怎么实现我的目标呢?片段应该再次附加到新活动中...这样我就可以更新我的片段数据了... - prom85