7

Activityが含まれています。NavigationDrawerは、そのフラグメントをジャグリングすることになっています。私の問題は、アプリケーションのすべての可能な画面で引き出しが利用可能でなければならないことです。私の唯一の活動であるMainActivityは、断片コールバックコードと様々なナビゲーション/ビジネスロジックで非常に乱雑です。NavigationDrawerのアクティビティは、フラグメントコールバックとアプリケーションビジネスロジックで混乱しています

アプリケーションが大きくなると、アクティビティをナビゲートするのが難しくなり、可能な代替アプローチについて考え始めました。新しいアプローチでは、オリジナルと同じ視覚的振る舞いを維持し、クラッタを除去する必要があります。

ナビゲーション・ドロワー・イベントの他に、ナビゲーション/ビジネス・ロジックも含む複数のフラグメントがあります。これにはMainActivityも処理されます。たとえば、フラグメントには3つ以上のボタンが含まれ、他のフラグメントを起動したり、クロスコンタミネーションのビジネスロジックを実行することができます。

MainActivityによって実装されたリスナーインターフェイスの結果として得られる量が増え、この瞬間の時点では20になります。見た目が良くないと感じるかもしれません。

メンテナンスを容易にするため、複数のアクティビティにデカップリングする可能性があります。これは、即座にフラグメントを変更する元のアプローチとは対照的に、引き出しが閉じられた後にのみ新しいアクティビティが開始されるため、リソース消費量が大きく、視覚効果がわずかにずれていることを示しています。

あなたはそれが悪い考えだと思いませんか?どのように改善することができますか?それとももっと良い解決策がありますか?

ありがとうございました。

UPD洗練された説明。

+0

をやっている私は、問題のような種類で立ち往生し、ここに質問を投稿されました> http://stackoverflow.com/questions/17779915/open-android-navigation-drawer-from-an-activity-class 。解決策を試してみませんでしたが、機能するかどうか試してみてください。うまくいけばわかりません。私は断片であるいくつかの画面からだけ引き出しを開くことに終わった。 –

+0

フェアポイント。視覚効果はどうですか?引き出しを閉じた後で初めて新しいアクティビティを表示する必要がありますか? – midnight

+0

あなたは引き出しをクリックして新しい活動を開始したり、断片の1つを表示したりすることができますが、それは問題ではなく、選択時に自動的に閉じます。 –

答えて

4

あなたには1つのアクティビティしかありません。だから、私はすべての画面があなたのアプリケーションの断片であると仮定します。このため、NavDrawerはデフォルトでアプリケーション内のいつでも使用可能になります。

NavDrawerの実装が異なる複数のアクティビティは必要ありません。 1つのBaseActivityを使用してNavDrawerの実装を処理し、継承を使用して、今後さらに実装したい場合は、好きなすべてのアクティビティでこれを使用できます。これはOOPの原則に従い、よりクリーンなコードにつながります。さらに、NavDrawerはすべてのアクティビティで同じように表示され、動作します。あなたのアプリケーション用のナビゲーションメニューを1つ持っているのはその目的です。

BaseActivityを拡張するActivityの仕事は、コールバックを使用して、フラグメントのトランザクションとそれらとの通信を処理することです。

このように、あなたのアプリケーションのナビゲーションは明確な構造であり、確かに行く方法です。

あなたはこのような何かを行うこの非常に良い完全tutorialに従うことができます。それは最初の一見で少し圧倒されますが、あなたは基本的な考えを得ることができます。

+2

これはOPが回避しようとしている/アドバイスを求めているものです。 「瞬時に断片を変える元のアプローチとは対照的に、引き出しが閉じられた後でのみ新しい活動が開始されるので、わずかな視覚効果の偏差が示唆される。 – Vikram

+0

@ user2558882私の答えは、引き出しの選択項目ではなく、アクティビティとフラグメントの両方を開始することができます。これはとにかく避けることです。そしてそれが、ビジュアルエフェクトや引き出しの動作が変わる唯一の状況です。私は、コードが異なるクラスでより構造化されていれば、コードはより洗練されたものになると言いました。 –

3

NavigationDrawerDelegateクラスを使用すると、すべてのナビゲーションロジックが処理され、アクティビティに追加され、ただそのオブジェクトに委任されることだけがお勧めします。 例がうまくhere

関連する問題