2016-05-12 2 views
1

私はビューページャーの非常に奇妙な動作を発見しました。 FragmentPagerAdapterを使用しているとき、getItem()が正しい位置、つまり位置0、位置1、位置2で呼び出されたことを確認しました.......... しかし、onCreateView()は逆の順序、つまり位置2、位置1、位置0 (ビューページが3つのオフスクリーンページを維持していると仮定して) ViewPagerはどういうわけかこれらのフラグメントのスタックを維持していると思います。ビューを作成する必要があるときは、スタックから最もアクティブなフラグメントをポップし、onCreateView()という名前にします。View Pagerを使用しているときにフラグメントのonCreateView()メソッド呼び出しの順序は何ですか?

私の質問は、onCreateView()の呼び出しの順序を制御できますか? そうでなければ、onCreateView()が呼び出されたときに作成したネットワーク要求を順序付けることができます。そのため、最初にフラグメント0のネットワーク要求を実行し、次にフラグメント1、次にフラグメント2を実行します。 onCreateView()が今まで呼び出されていない場合、UI要素が初期化されていない可能性があります。 したがって、これらのネットワークコールを正しい順序、つまり1、2、...の順番にするにはどうすればよいでしょうか。

答えて

0

onCreateView()はライフサイクルメソッドなので「順序を変更できる」と思うのではなく、フラグメント/アクティビティのライフサイクルの周りにデザインを概念化して、いつ何をするべきかを知る必要があります。また、UI関連のタスクを実行するという点では、onActivityCreatedで行う必要があります。このメソッドは、ホストアクティビティの作成時にonCreateView()メソッドの後に呼び出されます。アクティビティーおよびフラグメント・インスタンス、およびアクティビティーのビュー階層が作成されました。この時点で、ビューはfindViewById()メソッドでアクセスできます。あなたのケースでは

、あなたには、いくつかのUIの操作を実行したい場合は、各Fragmentため(このように、その後の操作を行います。彼らは使用を扱うので、あなたのフラグメントの作成を注文するという点で

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    View rooView = getView(); 
    //here you can do your UI related tasks 
} 

the discussion hereに従ってください。

+0

私はonCreateView()の呼び出しを制御することはできません.....しかし、自分のビューページャーを再実装したり、既存のビューページをオーバーライドできるようにする必要があります。フラグメントページを保持するためのスタック、それはキューを使用する必要があります。私はそれらのフラグメントをFIFO順にインスタンス化することができました。 – charlie

0

私は確信していませんが、魔法使いのアダプターがタブビューを埋めることで順序を制御できないと思います。もっと重要なことに、あなたはそれを制御してはいけません。可能であれば、onCreateViewが呼び出された後、ネットワークリクエストを開始します。すべての3つのフラグメントで使用するデータだけです。 3つのすべてのフラグメントのデータを提供するネットワーク要求がある場合は、要求が行われたときにフラグメントをリフレッシュします(インターフェイスを使用)。

+0

一般には、多くの断片があります。そして、各断片にはいくつかのネットワーク呼び出しが実行されます。今、フラグメント2のすべてのネットワークコールが最初に実行されていますが(フラグメント1は実際に表示されます)、次にフラグメント1に変わります。フラグメント1のロード時間が長くなり、ユーザーエクスペリエンスが悪くなります。 – charlie

関連する問題