0

親のFragmentのonCreateViewメソッドで、Child Fragment Managerを呼び出して、レイアウトにFragmentを挿入します。この子フラグメントには、少数のFloatingActionButtonが含まれています。なぜこのフラグメントのフィールドはnullですか?

私はトランザクションをコミットした後、私の基になるリストの内容を確認し(RecyclerViewの電源を入れる)、値が存在するかどうかに基づいて、FloatingActionButtonの一部を非表示/非表示にします。

ただし、ボタンがnullであることがわかります。フラグメントトランザクションをコミットしても、典型的なライフサイクルイベントのすべてを最初に呼び出すことはできませんか?待つように強制する方法はありますか?これにはより良い方法がありますか?

+0

フラグメントマネージャで 'executePendingTransactions()'を呼び出すことができ、フラグメントの 'onCreateView()'がその一部として呼び出されると思います。これは[documentation](http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions())で警告される最善の方法ではありませんが、オプションになる可能性があります。 –

+0

@GeorgeMulliganそれは私のために働いていないようです –

+0

これは本当に怒っています、それはAndroidでとても簡単な何かをするのは難しいはずがありません –

答えて

0

コミットが同期していません。フラグメントのライフサイクルがいつ実行されるかは保証されません。

フラグメントが「準備完了」の状態を知る必要がある場合は、フラグメントからホスティングアクティビティにコールバックを実装して通知します。

class CustomB extends CustomA { 
    interface Listener { 
    void onViewCreated(); 
    } 

    public View onCreateView() { 
    View v = super.onCreateView(); 

    if (getActivity() instanceof Listener) { 
     ((Listener)getActivity()).onViewCreated(); 
    } 

    return v; 
    } 
} 

一般的に言えば、自己完結型になるようにフラグメントを設計してください。フラグメントがアクティビティに緊密にバインドされている場合は、代わりにカスタムViewとして機能を実装することを検討してください。

+0

FloatingActionButtonsを含むフラグメントは、アプリのいくつかの異なる場所で使用されています。そのため、私はそれをFragmentにしました。この1つのケースではアクティビティにいくらかバインドされているので、代わりにそれを拡張しますか? –

+0

元のフラグメントを変更できない場合は、上記の機能を拡張機能を使って簡単に追加できます。 –

関連する問題