Activity
で1つの画面を実装し、Fragments
とmanaging all the fragments thru the activity
で他のすべての画面を実装することを考えています。
それは良いアイデアですか?そして私の答えはNOですが、それでもこの考えについてもっと明確に知りたいです。
アイデアの長所と短所は何ですか?
注:
フラグメントとアクティビティのリンクを教えないでください。
編集:
以下は、フラグメントとアクティビティに関するものです。
長所:
短所:
タブレットを検討していない場合にフラグメントを使用する理由は何ですか?アクティビティとフラグメントの開始時間の違いは何ですか?
作成しているアプリによって異なります。両方のアプローチを使用していくつかのアプリを作成しましたが、一方が常に他方より優れているとは言えません。作成した最新のアプリでは、単一のActivity
アプローチとFacebookスタイルのナビゲーションを使用しました。ナビゲーションリストから項目を選択するとき、単一のFragment
コンテナを更新してそのセクションを表示します。
そうは言っても、単一のActivity
を使用すると、多くの複雑さが生じます。編集フォームがあり、ユーザーが選択または作成する必要があるアイテムの一部については、新しい画面に移動する必要があるとします。アクティビティでは、startActivityForResult
を使用して新しい画面を呼び出しますが、Fragments
を使用すると、そのようなことはないため、Activity
に値を保存し、メインの編集フラグメントでActivity
は、データが選択されており、ユーザーに表示する必要があるかどうかを確認します。
単一のActivity
型に固執することについてAravindが言っていることも事実ですが、実際にはそのような制限はありません。アクティビティはFragmentActivityになり、MapView
が必要ない限り、実際の制限はありません。ただし、マップを表示したい場合は実行できますが、Android互換性ライブラリを変更してFragmentActivity
を拡張するMapActivity
にするか、パブリックを使用する必要があります利用可能 Android-support-v4-googlemaps 。
最終的に、私が知っているほとんどの開発者は、1つのActivity
ルートを使用して、コードを簡素化するために複数のアクティビティに戻りました。 UIでは、タブレットでは、デザイナーが思いつくようなクレイジーなやり取りを実現するために、単一のActivity
を使用することがあります。
-編集-
GoogleはついにMapFragment
を互換性ライブラリにリリースしたため、Android-support-v4-googlemapsハックを使用する必要がなくなりました。アップデートについてはこちらをご覧ください: Google Maps Android API v2
-編集2-
フラグメントの現代(2017)の状態に関するこの素晴らしい投稿を読み、この古い答えを思い出しました。私は共有すると思います: フラグメント:Androidのすべての問題の解決策
1つのアクティビティと17個のフラグメントがあり、すべてフルスクリーンであるプロジェクト(開発中の5か月)を終了しようとしています。これは私の2番目のフラグメントベースのプロジェクトです(以前は4か月でした)。
長所
finish()
し、フラグメントの場合と同じように、ナビゲーション用に同じ制御ロジックを作成する必要があります。 。これだけでフラグメントを使用することもできます。短所
まず、何をするにしても、アクティビティやフラグメントに大きく依存しない、モデル、ビュー、プレゼンターを使用したモジュラーデザインがあることを確認します。
アクティビティとフラグメントは実際に何を提供しますか?
したがって、そのためにそれらを使用しますONLY。彼らには十分な責任がありますが、過度に複雑にしないでください。私は、ActivityまたはFragmentでTextViewをインスタンス化することでさえ、悪い習慣だと主張します。 public View findViewById(int id) are PUBLICなどのメソッドがあります。
質問はより簡単になりました。複数の独立したライフサイクルイベントとバックスタックが必要ですか?もしそうだと思うなら、フラグメントを使用してください。絶対に考えない場合は、フラグメントを使用しないでください。
最終的には、独自のバックスタックとライフサイクルを作成できます。しかし、なぜホイールを再作成するのですか?
編集:なぜこれを反対票ですか?単目的クラスの人々!各アクティビティまたはフラグメントは、ビューをインスタンス化するプレゼンターをインスタンス化できる必要があります。プレゼンターとビューは交換可能なモジュールです。アクティビティまたはフラグメントに発表者の責任があるのはなぜですか?
すべてのフラグメントは互いに独立しているため、単一のアクティビティからフラグメントを制御できます。フラグメントには、独自のライフサイクル(onPause
、onCreate
、onStart
...)があります。ライフサイクルを持つことで、フラグメントはイベントに独立して応答し、onSaveInstanceState
を介して状態を保存し、戻すことができます(つまり、着信コールの後に再開するとき、またはユーザーが[戻る]ボタンをクリックするとき)。
それでも、いくつかのビューを表示したいアプリを作成する必要があるかのように、それは非常に良い考えです。この考え方により、単一のビューで複数のフラグメントを表示できます。
アプリのデザインレイアウトによって異なります。デザインレイアウトのActionBarでタブを使用している場合、アプリの単一アクティビティでタブクリックでフラグメントを変更できると仮定します。アクティビティがあり、ActionBarに3つのタブがあり、Fragmentsによって提供されるタブのビューがあるとします。これにより、管理が容易になり、実行も可能になります。そのため、すべてはアプリの設計スキームと、そのためにどのように決定するかによって異なります。
長所:
短所:
現在の画面サイズと向きに基づいて異なるxmlレイアウトを使用すると、アプリがより使いやすくなり、スマートフォンとタブレットの両方でアプリをリリースする予定がある場合、アプリの複数のバージョンをリリースする必要性を減らすことができるため、それは良い考えだと思います。アプリがタブレットと携帯電話の両方で使用されることがない場合、おそらく面倒な価値はありません。
私は、すべてのビューのインフレーションをフラグメントに延期して、柔軟性を高めることを提案しています。たとえば、複数のフラグメントを集約するタブレットの単一のランディングアクティビティがあり、同じフラグメントを電話機で再利用して、フラグメントごとに1つの画面を表示します。ただし、電話の実装では、各画面に個別のアクティビティがあります。アクティビティには、あまりに多くのコードはありません。ビューのインフレーションのために、対応するフラグメントに直ちに延期するためです。
タブまたはメニューナビゲーションはまったく新しい画面になるため、タブまたはスライドアウトメニューが導入されたときに、電話の実装を単一のランディングアクティビティに変更することは悪い考えだと思います。