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}

では、なぜ を呼び出した後 、 null が返さf.onAttach(activity)れるのでしょうか? 拡張フラグメント クラスでf.getActivity()オーバーライドしていないため、これが理由になることはありません...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 に答える