2017-05-15 12 views
1

私はの3種類のアカウントを持つアプリケーションに取り組んでいます。私たちはあなたが現在ログインしているアカウントたからに応じて、その上に1つのレイアウトview/hideアイテムを作成します。異なるアクティビティに対して同じレイアウトを処理するための最善のアプローチ

このアプローチでは、我々は異なるものをたくさんactivities/fragmentsやってきた、彼らはに包まれ、すべてのケースを処理しますif/else小切手など。成長するプロジェクトでは、これらのクラスを維持することが難しくなっています。

言って、私は非表示特定のシナリオでは、ビューに持っている場合、私は一つの場所でそれを隠す場合は、他のチェックが再びそれを目に見えるようになるので、私は1つだけボタンを非表示にする周り多くのif/elseのチェックを見ています、維持することは本当に難しい。

私はこの問題に関するアドバイスを専門家から楽しみにしています。

答えて

1

if/elseをコードに散らばっている場合は、多分あなたのコードで多型を使うべきです。

アクティビティの抽象クラスを作成し、特定のタイプごとにそれを特殊化します。

この階層のオブジェクトを作成するには、ファクトリメソッドパターンを使用します。このメソッドは、インスタンス化する具体的なクラスを決定するためのパラメータを使用し、次に返されるインスタンスを初期化します。

すべてのサブクラスに共通のアルゴリズムがあり、各クラスで実装する必要があるオープンステップが含まれている場合は、テンプレートメソッドパターンを使用します。

実行時に変更可能なポリモーフィックコードが必要な場合は、State/Strategyパターンを使用します。

+0

私はフレーバーを使用することが許されていないので、これは正しいアプローチだと思います。 – mallaudin

0

同じレイアウトのための別のXMLを作成して、レイアウトを作成するために<include layout="@"/> タグを使用し、それがあれば/他軽減し、また、あなたの

0

は、あなたが持っている新しいXMLファイルを作成する必要があり、コードの再利用性を提供しますあなたのアクティビティとフラグメントの共通ビューは、その共通ビューをアクティビティに追加するためにxmlのincludeタグを使用する必要があります&フラグメントxml。

1

あなたの別のアプリがマイナーなカスタマイズとテーマの変更を必要とするが、実際には同じ基本アプリである場合は、複数の味が確実に行く方法です。しかし、両方のアプリでカスタムコードの違いが多い場合は、複数のフレーバー戦略を使用して再考することをおすすめします。

また、フレーバとビルドタイプの違いに注意してください。フレーバーは、Playストアで同じアプリの異なるバージョン(フリー、プロなど)が必要な場合や、複数のクライアントで同じアプリをカスタマイズする場合に使用します。私はあなたがアカウントのすべての3つのタイプのために別々のレイアウトを作成する必要があり、あなたがあなたの場合は種類によって

int getLayout(int type){ return layoutMap.get(type); }

をレイアウトを選択するPickLayout静的クラス/メソッドを作成することができると思い詳細http://www.androidauthority.com/building-multiple-flavors-android-app-706436

+0

フレーバー以外は他の方法で処理できますか? – mallaudin

+0

別のJavaクラスとxmlファイルを使用してください。 – Pavya

0

ため

あなたはincludemergeを使用するか、ViewStubも使用する必要があります再利用可能なレイアウトを持っている。

チェーンのif/elseがある場合は、スケール可能でエラーが発生しやすいMap linkを使用する必要があります。

android suggested design-patternに従うと、テストケースの作成にも役立ちます。

関連する問題