為何出現此錯誤訊息?'onBackPressed(): Unit' is deprecated. This method has been deprecated in favor of using the
{@link OnBackPressedDispatcher} via {@link #getOnBackPressedDispatcher()}.
The OnBackPressedDispatcher controls how back button events are dispatched
to one or more {@link OnBackPressedCallback} objects.

 你的 onBackPressed() 方法已經被 deprecated(過時),Google 建議使用 OnBackPressedDispatcher 來處理返回操作。


✅ 解決方案

1️⃣ 改用 onBackPressedDispatcher

onBackPressedDispatcher 提供更靈活的方式來處理返回事件:

kotlin
findViewById<Button>(R.id.webviewbutton21).setOnClickListener { vibratePhone() // 振動手機(如果需要) if (webView.canGoBack()) { webView.goBack() // WebView 返回上一頁 } else { onBackPressedDispatcher.onBackPressed() // 使用新方法 } }

為什麼要改?

🚨 onBackPressed() 為什麼過時?

  • 舊版 onBackPressed() 會直接關閉 Activity,但新版本 Android 提供 更多控制,可以監聽返回行為、攔截事件,甚至自定義動作。

  • 使用 OnBackPressedDispatcher 可以更靈活處理多個 onBackPressed 事件,例如:

    • WebView 返回(如果可用)

    • 彈出對話框(如果有)

    • 關閉 Activity(如果沒有其他可返回的內容)


2️⃣ 如果你的 Activity 需要監聽返回鍵

如果你的 Activity 需要在全域監聽返回事件,例如 WebView 內返回:

kotlin
private val onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { if (webView.canGoBack()) { webView.goBack() } else { finish() // 直接結束 Activity } } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 綁定 OnBackPressedDispatcher onBackPressedDispatcher.addCallback(this, onBackPressedCallback) }

這樣,即使用戶按下手機返回鍵,也能先檢查 WebView 是否能回上一頁,否則才會關閉 Activity


結論

  • 單次返回事件onBackPressedDispatcher.onBackPressed()

  • 全域返回監聽OnBackPressedCallback + onBackPressedDispatcher

  • 不要再用 onBackPressed(),它已經被淘汰!

這樣你的返回行為會更流暢,適用於新版本 Android 🚀

沒有留言:

張貼留言

excel 最大值用max,取最小值但要排除0,要怎麼寫?

 =MIN(IF(A1:A10<>0, A1:A10))