フラグメントを使用して、複数の画面やレイアウトにうまく適応するアプリを作成する方法を理解しようとしています。私はいくつかの例を研究しました:
- Android デベロッパー ガイドのFragmentsドキュメント。
- Google IO アプリ
- ActionBar Sherlockのフラグメント サンプル。
これらはすべて、複数のActivity
アプローチを提唱しています。
- 大きな画面で、
Activity
複数Fragment
の sで単一を表示します。 - 小さい画面では、 を
Fragment
複数Activity
の に分割します。
私は別のアプローチを考えました-単一のアプローチActivity
:
Activity
すべてのFragment
sを含むシングルを用意してください。- 画面のサイズと向きに応じて、適切な
Fragment
(s) を表示/非表示にします (FragmentTransaction.show()
/を使用FragmentTransaction.hide()
) 。
Android デベロッパー ガイドで使用されているのと同じ「ニュース記事リスト / 記事の内容」の例で説明すると、次のようになります。
- との
News
両方を含むアクティビティを用意します。ArticleListFragment
ArticleReaderFragment
- タブでは、両方のフラグメントが常に表示されます。
- 電話機では、
ArticleReaderFragment
は最初は非表示になっています。リストから記事を選択すると、ArticleListFragment
が非表示になり、ArticleReaderFragment
が表示されます。
誰かが同様のアプローチを使用しましたか? この方法に実際的な欠点はありますか? 複数のアクティビティの方法と比較して、良い/悪いように見えますか? たとえば、フラグメントを XML で表示/非表示にすることはできません。これには使用する必要がありFragmentTransaction
ます。
EDIT 1: 仮説シナリオの説明
画面に一度に最大 3 つの「ペイン」を表示できるアプリを想像してみてください。さらに、考慮すべき要素は次のとおりです。
- 電話機は一度に 1 つのペインしか表示できません (縦向き/横向きに関係なく)。
- 7 インチのタブレットは 2 つのペインを表示でき、ポートレート モードでは垂直方向に分割され、ランドスケープ モードでは水平方向に分割されます。
- 10 インチ以上のタブレットは、2 つのペインを縦に分割して表示できます。横向きに水平に分割された 3 つのペイン。
簡単にするために、テレビ画面については議論から除外しましょう。
さて、これをデザインに変換します:
- Frag1、Frag2、Frag3 の 3 つのフラグメントがあります。
- 最も単純なケースでは、3 つのフラグメントすべてが 1 つのアクティビティにあります (ActivityA と呼びましょう)。これは10インチの横型ケースです。
- もう 1 つの「単純な」ケースは、各 Fragment が独自の Activity にある場合です。ActivityA には Frag1 が含まれています。ActivityB には Frag2 が含まれ、ActivityC には Frag3 が含まれます。
これまでのところ、Android デベロッパー ガイドに示されているニュース リーダーの例と大きく異なるものは考慮していません。唯一の大きな違いは、2 つではなく3 つのフラグメントがあることです。
今、2つの破片しか収容できない7インチのタブの場合。これはどのように機能しますか?ここでは 2 つの組み合わせが可能であることに注意してください。
- Frag1 と Frag2 が表示されています。
- Frag2 と Frag3 が表示されています。
私はこれに頭を包むことができません。このすべてを ActivityA 内で行う必要がありますか? まったく新しい ActivityD を作成するだけですか? いくつのレイアウトを作成する必要がありますか (私は約 8 つ数えました)? パーミュレーション多すぎない?
上記で提案した単一アクティビティのアプローチも、このシナリオには適していない可能性があることを認識しています-フラグメントを表示/非表示にすること自体は自明ではないためです。
レイアウトや組み合わせに圧倒されることなくこれを処理する方法について何か提案はありますか?