我有一个管理类,它是一个保留的片段,它不保留这些片段的保留片段和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);
}
解释:
现在我的问题是关注(缩短)调试输出:
ON_ATTACH_0:parentActivity:{1123400376}
ON_ATTACH_1:this:1121944544片段:ExerciseViewFragment {42e2da98},parentActivity:{NULL}
那么为什么在调用f.onAttach(activity)
后,f.getActivity()
会返回null吗?我没有在我的扩展片段类中覆盖onAttach
,所以这不是原因......
答案 0 :(得分:0)
根据https://developer.android.com/reference/android/support/v4/app/Fragment.html#getActivity()
的文档 如果片段与Context相关联,则 getActivity()
可能返回null。
根据此文档https://developer.android.com/reference/android/support/v4/app/Fragment.html#onAttach(android.app.Activity),我们已弃用onAttach(Activity activity)
,因此请改用onAttach(Context)
。
答案 1 :(得分:0)
我认为你的问题在于调用
super.onAttach(activity);
在onAttach
方法的最后。
将其称为此方法中的第一件事,如下所示:
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity)
// and here goes your code
[...]
}