4

我有一个管理器类,它是一个保留的片段,它不包含该片段的保留片段和 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}

那么为什么在调用之后 f.onAttach(activity)返回f.getActivity()null呢?我没有onAttach在我的扩展片段类中覆盖,所以这不是原因......

4

2 回答 2

0

我认为你的问题是打电话

super.onAttach(activity);

在你的onAttach方法结束时。在这个方法中首先调用它,如下所示:

@Override
public void onAttach(Activity activity)
{
     super.onAttach(activity)

     // and here goes your code
     [...]
}
于 2015-08-26T13:10:19.117 回答
0

根据https://developer.android.com/reference/android/support/v4/app/Fragment.html#getActivity()的文档

getActivity()如果片段与上下文相关联,则可能返回 null。

根据本文档https://developer.android.com/reference/android/support/v4/app/Fragment.html#onAttach(android.app.Activity)onAttach(Activity activity)已弃用,因此请onAttach(Context)改用。

于 2015-08-26T13:05:49.997 回答