2016-07-15 7 views
2

を終えている場合、私は持っているのonCreate/onCreateViewメソッドへの呼び出しを防ぐ方法ActivityAfragmentAfragmentA活動が

onAttach()方法は、私はいくつかの条件をチェックする必要があり、それが失敗した場合、私はする必要があるホストアクティビティを終了します。 getActivity().finish()を呼び出してアクティビティを終了します。

私はfinishメソッドを呼び出した後でも、fragmentAではonCreate()onCreateView()、およびonViewCreated()のメソッドを呼び出しています。

これらの呼び出しを停止する方法はありますか?

+2

フラグメントをアクティビティに追加する前にこれらの条件を確認できますか? – DeeV

+0

あなたの提案をありがとうDeeV。 私の場合、onAttach()メソッドでこのチェックが必要です –

答えて

1

@DeeVがコメントしたように、私はFragmentを付ける前に条件をチェックしました。この場合、フラグメントライフサイクルをよりクリーンな方法で処理する必要はありません。

これが可能でない場合は、ハッキーな方法があります。 finish()onAttach()に呼び出し、アクティビティのメソッドisFinishing()を使用してbooleanフラグを返します。私はこれが問題を解決すべきだと思う。

など。フラグメントのonCreateメソッドで:

if (getActivity().isFinishing()) { 
    // finish was called in onAttach 
} 
+0

Gennadiiありがとうございました はい、オプションですが、次にonCreate()、onViewCreated()、onViewRestored()などのすべてのメソッドをisFinishing )メソッド。 これらの方法でこの小切手を追加する以外のオプションがあるのだろうか。 –

+0

いいえ、これを避けることはできません。アンドロイドで動作する方法は、 'onCreate()'や 'onStart()'などのメッセージをUIメッセージキューに追加するということです。つまり、キューから明示的に削除しない限り処理されます。もちろん、これを実行するための 'Runnable'やトークンがないので、キューからそれらを削除することはできません。ですから、あなたは 'isFinishing()'メソッド呼び出しでこのハックィーなやり方をするか、フラグメントそのものを付けないようにしてください。これを避けることはできませんか?私は、これがあなたの主な焦点であるべきだと思って、フラグメントの添付イベントを回避しようとしています。 –

+0

状況が間違っているように見えます。フラグメントは、アクティビティをアタッチするときにアクティビティを閉じるべきかどうかを決定します。 'onAttach'は、アクティビティ参照の格納や、そのフラグメントがアクティビティとのやりとりのために使用するいくつかのインタフェースにキャストするなどの目的のためだけに使用されることになっています。だから、問題はあなたのユースケース自体であり、フラグメントコールバックではないと確信しています。だからあなたは基本的にそれらのハッキングをしなければならないのです。断片はそれのように使われることを意図していません。 –