2011-02-07 8 views
2

ユーザーが自分のアプリを起動するときにEULAのようなダイアログを表示する必要がありますが、私のアプリにはダイアログの前に表示する必要のあるスプラッシュ画面もあります。これを次のようにコーディングしました:Android Activity.startActivity()とDialog.show()order

Activity A.onCreate(...) { 
... 
1. startActivity(Activity B) [this activity calls .finish() after x seconds] 
2. dialog.show() 
... 
} 

論理的には、これはうまくいくはずです。しかし、アクティビティBからアクティビティAに戻ると、ダイアログが表示されているように画面全体が淡色表示されますが、ダイアログウィンドウは表示されません。

活動Bが行われ、何の奇妙な問題が発生していないされた後、私はそのような、ダイアログが示すように呼び出しを逆にすることによってこの問題を回避することができました:

Activity A.onCreate(...) { 
... 
1. dialog.show() 
2. startActivity(Activity B) [this activity calls .finish() after x seconds] 
... 
} 

呼び出しの順序は非常に重要である理由を誰もが知っていますか?私にとっては、彼らは同じように動作するはずです。

答えて

3

これらの関数は両方とも非同期関数です。つまり、コードの実行は一時停止せず、次の行を呼び出し続けます。

もう1つを直ちに呼び出すのではなく、次のものを呼び出す前に返すのを待つ必要があります。最初にダイアログを表示する場合は、ダイアログが閉じられたときにリッスンするためにonDismissListenerを追加します。そのリスナー内で、次のアクティビティを開始できます。

+1

他の方法では、startActivityForResult()でアクティビティBを呼び出し、onActivityResult()メソッドで.show()を呼び出すことができます。 – Jems

+0

私はむしろそれが最初のアクティビティであり、ダイアログの2番目のものです - これを行うにはどうしてもonActivityResultを使用しませんか? –

+0

なぜあなたはonActivityResultを使いたくありませんか?これは、アクティビティの終了後に何かを行う正しい方法です。しかし、あなたはスプラッシュスクリーンにeulaを表示できるので、Bアクティビティからダイアログを開始してOKを押すのを待ってスプラッシュスクリーンを隠すことができるようです。 –