0

コンテキスト:

  • ListView といくつかのメニュー項目を含む単純な ListActivity (「 Activity 1 」と呼びます) があります。
  • ListView 内の項目をクリックすると、ポップアップ ダイアログが表示されます。
  • ActionBarのメニュー項目ボタン (「Button 」と呼びましょう) をクリックすると、次を使用してアクティビティ (「 Activity 2」と呼びましょう) が開始されます。startActivityForResult()

問題: ユーザーが ListView 項目に触れonListItemClick()て ListActivity でイベントを生成し、すぐに Button に触れると、onOptionsItemSelected()イベントがメッセージ キューにポストされ、やがて処理されます。これにより、次の奇妙な動作が発生します。

  1. ユーザーが ListView アイテムに触れる
  2. ユーザーがボタンに触れる
  3. onListItemClick()によって生成されたダイアログがユーザーに一瞬表示される
  4. アクティビティ2が開始されonOptionsItemSelected()、ダイアログの先頭から開始されます
  5. ユーザーがアクティビティ2を終了すると、アクティビティ1に戻るのではなく、ダイアログに戻ります。

これは非常に奇妙で不安です。以前の GUI フレームワークで UI を作成した私の経験では、GUI フレームワークは 2 番目のイベントがキューに投稿されることを決して許可しなかったため、これらのことを心配する必要はありませんでした。

質問: ListView アイテムの選択に応答して、アプリが既にダイアログを表示しているときに、ユーザーがボタンを押してアクティビティ2を開始できないようにする「優先」デザイン パターンはありますか?

ダイアログが終了するまでアクティビティ1ビュー階層全体を無効にしますか??

4

1 に答える 1

0

ToSに、片手に親指が2つあるユーザーはアプリを慎重に使用する必要があることを記述します。さらに深刻なことに、ブール値またはDialog.isShowing()を使用してアクティビティを開始する前に、ダイアログが開いているかどうかを確認できます。

于 2013-01-19T04:53:10.567 に答える