2016-04-03 7 views
1

複数の断片でいくつかのアクティビティを持つアンドロイドアプリです。 これらのアクティビティまたはフラグメントは、backStackの上部になくても、異なるサービスから通知を受け取っていても、実行中である可能性があります。シントンダイアログの作り方

何らかのイベントが発生した場合、ユーザーと通信するためのダイアログを表示する必要があります。スタックの上のアクティビティまたはフラグメントには、そのイベントのハンドラがない場合があります。興味のある他のアクティビティやフラグメントは、反応して1つのダイアログをユーザーに開く必要があります。

問題は、イベントやイベントを処理するフラグメントのリスナーが、すでに同じダイアログが表示されているかどうかを個別に知ることではありません。

ハンドラがダイアログを開くべきかどうかを判断する最も良い方法は何ですか? このダイアログは同じイベントで同じですので、シングルトンとして持つことができれば役に立ちます。

このような状況では、誰かがダイアログをシングルトンにする方法はありますか?

答えて

1

ダイアログが現在のビューにリンクされているため、ダイアログのシングルトンは作成できません。現在のビューが変更される可能性があります。ダイアログは、アクティビティの異なるインスタンス(1つまたは複数)から作成されます。

しかし、単純なシングルトンクラスを実装してすべてのダイアログデータを保存することができます - データをに保存し、ダイアログのonCreateViewで取得します。

したがって、すべてのデータでシングルトンインスタンスが取得されますが、ダイアログは現在のビューによって異なる場合があります。

また、シングルトンクラスの表示されたダイアログに弱いリンクを保存することができます。このような方法を使用すると、現在表示されているダイアログが検出されます。

+0

ありがとうAtrem!単一のデータインスタンスは問題ではありません。 1つのアクティビティのコンテキストに関連付けられたダイアログが表示されます。ここで、複数のアクティビティまたはフラグメントがダイアログを表示するためのイベントを受け取る場合、ダイアログが表示されているかどうかを判断することは困難です。たぶん、singleTaskまたはsingleInstanceのいずれかでアクティビティを作成すると、どんな考えが助けになるでしょうか? – lannyf

+0

私は、ダイアログボックスへのリンクを単一インスタンスクラスに保存することをお勧めします。その場合、メソッド 'ensureShowDialog(Context context)'を作成します。このメソッドは、現在のダイアログが表示されているかどうかをチェックします。はいの場合は、ダイアログを表示することができます。別のcasrでは、新しいデータをダイアログに渡すことができます。 –

関連する問題