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

Android Handler 實現按鈕點擊延遲隱藏圖片:線程安全的 UI 更新

     編輯:程式設計綜合問答

問題

在 onClick 中連續調用 setVisibility(VISIBLE) 和 setVisibility(INVISIBLE),圖片閃一下就消失,無法看到 2 秒顯示效果。

原因

UI 更新在同一幀合併執行,最後狀態生效;且不能在主線程 Thread.sleep(會阻塞 UI、導致 ANR)。

正確做法:Handler.postDelayed

private final Handler handler = new Handler(Looper.getMainLooper());
private final Runnable hideRunnable = () -> imageView.setVisibility(View.INVISIBLE);

button.setOnClickListener(v -> {
    imageView.setVisibility(View.VISIBLE);
    handler.removeCallbacks(hideRunnable); // 防止重複點擊疊加
    handler.postDelayed(hideRunnable, 2000); // 2秒後隱藏
});

關鍵點

  • Handler 綁定主線程 Looper,確保 UI 操作在主線程執行。
  • removeCallbacks 避免多次點擊導致多個延遲任務疊加。
  • 使用 Runnable 封裝隱藏邏輯,代碼清晰可復用。

Kotlin 協程寫法(現代項目)

lifecycleScope.launch {
    imageView.visibility = View.VISIBLE
    delay(2000)
    if (!isDestroyed) imageView.visibility = View.INVISIBLE
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved