コンテキスト:
- ListView といくつかのメニュー項目を含む単純な ListActivity (「 Activity 1 」と呼びます) があります。
- ListView 内の項目をクリックすると、ポップアップ ダイアログが表示されます。
- ActionBarのメニュー項目ボタン (「Button 」と呼びましょう) をクリックすると、次を使用してアクティビティ (「 Activity 2」と呼びましょう) が開始されます。
startActivityForResult()
問題: ユーザーが ListView 項目に触れonListItemClick()
て ListActivity でイベントを生成し、すぐに Button に触れると、onOptionsItemSelected()
イベントがメッセージ キューにポストされ、やがて処理されます。これにより、次の奇妙な動作が発生します。
- ユーザーが ListView アイテムに触れる
- ユーザーがボタンに触れる
onListItemClick()
によって生成されたダイアログがユーザーに一瞬表示される- アクティビティ2が開始され
onOptionsItemSelected()
、ダイアログの先頭から開始されます - ユーザーがアクティビティ2を終了すると、アクティビティ1に戻るのではなく、ダイアログに戻ります。
これは非常に奇妙で不安です。以前の GUI フレームワークで UI を作成した私の経験では、GUI フレームワークは 2 番目のイベントがキューに投稿されることを決して許可しなかったため、これらのことを心配する必要はありませんでした。
質問: ListView アイテムの選択に応答して、アプリが既にダイアログを表示しているときに、ユーザーがボタンを押してアクティビティ2を開始できないようにする「優先」デザイン パターンはありますか?
ダイアログが終了するまでアクティビティ1ビュー階層全体を無効にしますか??