2012-05-04 17 views
2

バックグラウンドhttp操作の結果として、前景のアクティビティでダイアログを表示する必要があります。現在のコンテキストがわからない場合は、すべてのダイアログを表示しますか?

ダイアログが出現しなければならないときは、どこでも構いません。たとえば、新しいアクティビティを開始したなど、コンテキストを変更できます。

私は私が取得ダイアログ表示するためのApplicationContextを使用する場合:

05-04 17:32:32.560:E/AndroidRuntime(3663): android.view.WindowManager $ BadTokenException:追加することができませんウィンドウ - トークンnullはアプリケーション用ではありません

so ...私はどのようにして目標を達成できますか?

提案がありますか?

+0

[PopUpダイアログのAndroidからバックグラウンドスレッド](0120-18753-03) – Sam

+0

私の答えは見たことがありますか? – dreamtale

答えて

-1

フォアグラウンドに通知する方法が必要です。操作が完了しました。リスナーを登録することでこれを行うことができます。コードを投稿していないので、私は仮定します。

私が知っているフォアグラウンドアクティビティには、ブロードキャストインテントを使用する最初の方法を通知する方法が2つあります。Android BroadcastReceiver within Activityに関する質問があります。あなたはバックグラウンド操作から放送意図を発して、あなたの活動を受信者として登録することができます。

ここhttp://developer.android.com/reference/android/content/Context.html#sendOrderedBroadcast%28android.content.Intent,%20java.lang.String,%20android.content.BroadcastReceiver,%20android.os.Handler,%20int,%20java.lang.String,%20android.os.Bundle%29ここ http://developer.android.com/reference/android/content/BroadcastReceiver.html

第二の方法は、例えば、バックグラウンド動作を行うクラスでリスナーを登録することである(擬似コード)リスナーがあり得る

@Override 
protected void onResume() { 
    BackgroundOperator.registerListener(this); 
} 

@Override 
protected void onPause() { 
    BackgroundOperator.unregisterListener(this); 
} 

public void onOperationComplete(...) { 
    // TODO: Show your dialog here 
} 

見ますこのようなもの(あなたのアクティビティが実装できるもの):

アイデアここであなたのフォアグラウンドのアクティビティは現在登録されているリスナーになるので、onOperationComplete(...)コールバックの受信者になり、ダイアログを表示することができます。操作が完了したときのアクティビティ

+0

問題はどのように前景の活動であるかを知る方法ですか? – Noodles

+0

私は自分の答えを更新しているので、アクティビティはonResumeとonPauseに登録されます。これにより、フォアグラウンドアクティビティだけがバックグラウンド操作からコールバックを取得できるようになります。 –

+0

ところで、Webリクエストをしている場合は、Virgil DobjanschiのGoogle IO RESTプレゼンテーションhttp://www.youtube.com/watch?v=xHXn3Kg2IQEを見てみることをお勧めします(彼のService Helperクラス) –

2

ダイアログを作成するときはいつでも、あなたはアクティビティ権がありますか?なぜその活動を文脈として使うのではないのですか?

私のコードでは、私のためのダイアログを作成するヘルパークラスを作成します。そのヘルパークラスに、私は現在の活動、タイトル、メッセージを渡します。ダイアログを構築し、管理できるAlertDialogオブジェクトを返します。

あなたはそれを試すことができますが、ダイアログを表示するコンテキスト/アクティビティを知る必要があります。

+0

いいえ、バックグラウンドの結果(ハンドラを使用して)を待っている間に、現在のコンテキストを変更する新しいアクティビティを開始できるため、できません。 前のアクティビティのハンドラは、ハンドラが(あなたのソリューション)であるアクティビティではなく新しいものにダイアログを表示することができます。 – Noodles

0

あなたが必要とするのは、タスク(現在のアクティビティを表示)のトップアクティビティを取得し、それを使ってダイアログを表示することです。

ので、このスレッドを参照してください。How to get any identifier of the topmost activity?

編集:が背景から、ダイアログを表示しますが、通知を送信したり、単に長い時間のトーストを作ることができ、優れたユーザーエクスペリエンスではありません。

0

私の意見では、1つの新しいアクティビティを作成し、それをダイアログのように使用するのが最善の方法です。 ステップ:

  1. MainActivy(オリジナルであることに)、例えば、新しいアクティビティを作成します。

  2. 必要に応じてactivity_main.xmlを入力します。

  3. あなたのAndroidManifest.xmlにこの行を書き直してください。

    <activity 
         android:theme="@style/AppTheme.Dialog" 
         android:name="com.myapp.original.example" 
         android:label="@string/timy_titlle" > 
    
  4. インテントクラスを使用して、他のアクティビティからMainActivityをDialogに変換しました。

アクションバーコンパクトを使用している場合は、this others stepsに従うことができます。

関連する問題