web-dev-qa-db-ja.com

アクティビティ付きのナビゲーションドロワーとフラグメント付きのナビゲーションドロワー

私が現在取り組んでいるアプリを例にとってみましょう。-複数のアイテムを含むnavigationDrawerがあります。今のところ私が興味を持っている2つのアイテムがあります。それらをXとYと呼びます。

  • xとYの両方をクリックすると、x要素またはy要素のリストを含むフラグメントが表示されます。

  • xまたはyリスト要素を選択すると、選択したアイテムに関する情報を表示する新しいフラグメントが表示されます。ビューフラグメントはx要素とy要素で異なります

  • ビューフラグメントで、編集フラグメントを表示する特定の要素を編集することを選択できます

フラグメントアプローチは機能していますが、フラグメント間のナビゲーションを管理するのに時間がかかりました。また、おそらくXやYと同様に、ドロワーにいくつかの新しいアイテムを追加する必要があります。ドロワーを持ってフラグメントの切り替えを行う私の主なアクティビティは、すでにかなり密集しているため、私の質問になります。フラグメントからアクティビティに切り替えますか?単一のアクティビティですべてのアイテムのすべてのフラグメントを処理するのではなく、ドロワーアイテムが選択され、そのアクティビティで選択されたアイテムに関連するリスト/表示/編集フラグメントを処理するときに、新しいアクティビティを開始することを考えていました。

それは良い考えですか?デザインが悪いですか?

14
Ionuț Ciuta

私は同じようなボートに乗っており、Activitiesメソッドを使用しました。その方法で、NavigationViewの特定のナビゲーションクリックのフラグメントのグループを持つ各アクティビティがあります。明らかに私はNavigationViewを使用していますが、1つのMainActivityだけでこれらすべてのフラグメントを管理することは本当に骨の折れる作業です。

ナビゲーションアイテムをクリックするときに、EachActivityが独自のフラグメントを管理することを好みます。これにより、パフォーマンスが向上します。これは、非常に多くのフラグメントのライフサイクルについて心配する必要がなく、backStackであり、地獄を追加/削除/表示/非表示にするためです。

次のSO質問を使用して、NavigationDrawerを実装するBaseActivityを巧みに使用し、他のすべてのアクティビティと共有しました。本当の魔法は、コードが重複しないこと、または単なる古い継承手法ではないことです。 。

ここにリンクがあります、チェックしてください

私はこの方法を2つのプロジェクトで使用しましたが、非常にうまく機能しており、最初からフラグメント管理を行う必要がありません。

9
Rinav

提出すべき点は次のとおりです。

  1. フラグメントアプローチの方がはるかに優れています。ユーザーのIエクスペリエンスの向上にはフラグメントを使用する必要があります。

  2. このように考えて、画面を情報のバスケットとして想像してください。別のバスケット(つまり別の画面)がある場合は、大量のデータを前後に転送する必要があります。私にとっては、コンテナアクティビティとともに2つのバスケットのフラグメントを使用する方がはるかに優れています。そしてもちろん、3つ以上のバスケット/スクリーンが存在する可能性があります。

  3. フラグメントまたはアクティビティのみを使用する必要があるという厳格なルールはありませんが、グーグルは可能な限りフラグメントを使用するの方がはるかに優れていると述べています。

  4. 一般に、開発者はフラグメントを使用してグループ関連ロジックを一緒に使用します。これを行うと、実行しようとしていることの論理グループ化が提供されるため、この方法で行う方がはるかに優れています。

  5. Javaデータオブジェクトをコンテナアクティビティを介してフラグメント間で渡すことも簡単ですインターフェイスの助けを借りて。これも非常にモジュール化されたアプローチと見なされます。

残りは、アプリケーションのフローをどのように定義するかによって異なります。シナリオでは、フラグメントを使用する方がはるかに優れたアプローチだと思います。関連するロジックが大幅に変更されたと思われる場合は、コンテナアクティビティを使用してください。

7
Kaveesh Kanwal

まず、フラグメント間のナビゲーションの管理は難しくありません。あなたはチェックすることができます グーグルのチュートリアル 。コードを投稿する場合は、いくつかの編集を提案できます

2つの理由で悪いデザインだと思います

  • 多くのコードのやり直し
  • ナビゲーションパターンをタブと言うように変更したい場合、それは簡単にはできません。
2
Nick