首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android AlertDialog 同步等待用戶選擇返回 boolean 的正確模式

     編輯:程式設計綜合問答

誤區

嘗試在 onClick 監聽器中直接修改局部變量 boolean answer 並返回,**不可行**,因為:

  1. Java 要求匿名內部類捕獲的局部變量必須 final,無法重新賦值。
  2. dialog.show() 是**異步**的,不會阻塞當前線程,方法會立即返回默認值。

正確異步回調模式

public interface ConfirmCallback {
    void onResult(boolean confirmed);
}

public static void confirm(Context context, ConfirmCallback callback) {
    new AlertDialog.Builder(context)
        .setTitle("確認")
        .setMessage("是否繼續?")
        .setPositiveButton("是", (d, w) -> callback.onResult(true))
        .setNegativeButton("否", (d, w) -> callback.onResult(false))
        .setCancelable(false)
        .show();
}

// 調用
confirm(this, confirmed -> {
    if (confirmed) {
        // 用戶點擊是
    } else {
        // 用戶點擊否
    }
});

若必須同步阻塞(僅限非主線程)

可用 CountDownLatch 配合 final boolean[] answer = new boolean[1] 實現,但**嚴禁在主線程使用**,否則導致 ANR。

核心原則

  • Android 所有對話框均為異步,**沒有同步阻塞 API**。
  • 採用回調/接口/Listener 模式處理用戶交互結果。
  • Lambda (Java 8+) 讓回調代碼更簡潔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved