10

複数の ViewPager に基づくデザインを実装するのに少し問題があります。

大まかに言えば、コンテンツとして FrameLayout だけを持つ FragmentActivity があります。表示したい3つの異なるフラグメントがあります。3 つすべてがフルスクリーンで、一度に使用できるのは 1 つだけです。

フラグメント 1 は、いくつかの TextView と ImageView を含む基本的なフラグメントです。フラグメント 2 には、いくつかの単純なフラグメントを供給する ViewPager と FragmentPagerAdapter があります。フラグメント 3 には ViewPager と FragmentPagerAdapter があり、いくつかの単純なフラグメント (フラグメント 2 とは異なります) をフィードします。

FragmentActivity onCreate() で FragmentManager を取得し、トランザクションを開始して FrameLayout にあるものを Fragment 2 の新しいインスタンスに置き換えます。

この時点で、すべてが期待どおりに機能しています。Fragment 2 の ViewPager は完全に機能します。

これで、FrameLayout の Fragment 2 を Fragment 3 の新しいインスタンスに置き換えるメニュー オプションができました。これも問題なく動作します。

別の置換トランザクションで Fragment 2 を FrameLayout に戻そうとすると、問題が発生します。上部に PagerIndicator が表示されますが、ページが空白です。

Fragment 2 の新しいインスタンスを作成して、replace トランザクションを呼び出してみました。また、新しいインスタンスを作成する代わりに、replace を呼び出すときに Fragments にタグを設定し、replace の前に findFragmentByTag チェックを追加しようとしました。2 回目の置換後、どちらも同じ結果の空白ページが表示されました。

参考までに、私の最初の設計は、ViewPager と ViewIndicator を持つ単純な FragmentActivity でした。上記の説明の Fragment 2 と Fragment 3 しかなく、それらを切り替えるメニュー オプションがありました。切り替えるには、2 つの異なる FragmentPagerAdapter を定義し、ViewPager.setAdapter を呼び出して、選択した FragmentPagerAdapter を設定しました。これは完全に機能していましたが、ViewPager をまったく使用しない新しいトップ レベルの Fragment が必要になりました。これが、ViewPagers を独自の Fragments に移動することにした理由です。私の考えは、フラグメントを FrameLayout に交換するだけだということです。

今は自分のコードがないので投稿できませんが、回答を容易にするために明日の質問にコードを追加します。

4

2 に答える 2

0

「良い方法」ではなく使用できるブロッコリー。しかし、私にとってはうまくいきました。

フラグメントをバインドするビュー 2 レイアウトで使用できます。最初 - フラグメントを持つフラグメントの場合。2番目 - 他のフラグメント用。

フラグメントをフラグメントで置換すると、置換は行われませんが、最初のレイアウトの可視性がなくなり、新しいフラグメントが 2 番目のレイアウトに追加されるだけです。背面で、2 番目のレイアウトからフラグメントを削除し、最初のレイアウトの可視性を可視に設定します。

于 2012-12-17T21:22:27.843 に答える