📱

Android:戻るキーをOnBackPressedDispatcherをつかって無効化する方法

2022/09/24に公開

はじめに

Androidアプリを作成している際に、ナビゲーションバーに表示されている「戻るキー」を無効にする必要がありました。その無効方法について説明します。結論から述べると、OnBackPressedDispatcherを使います。

戻るキーナビゲーションバーの戻るキー

やり方

onBackPressedを使う方法

まずはonBackPressed()メソッドをオーバーライドして実装する方法です。
これは戻るキーが押されたときに、onBackPressed()内に書かれた処理を実行します。
戻るキーを無効化したいActivity内で下記を記述し、関数内には何も記述しません。

    override fun onBackPressed() {
        super.onBackPressed()
        // 何も書かない
    }

しかし、テストで使用しているタブレットPCでは意図した動作をせず、戻るキーが機能してしまいました(無効化しませんでした)
なので、後述するOnBackPressedDispatcherをつかうことで無効化することができました。

OnBackPressedDispatcherを使う方法

公式サイト「Android developers」では、onBackPressedではなくOnBackPressedDispatcherを使った方法で戻るキーを制御することが推奨されています。例えば、コードは下記のようになります。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

	// addCallbackでコールバックを追加
        onBackPressedDispatcher.addCallback(callback)
    }

    //OnBackPressedCallbackのコンストラクタはtrueにすることでコールバックを有効にする
    val callback = object : OnBackPressedCallback(true) {
        //コールバックのhandleOnBackPressedを呼び出して、戻るキーを押したときの処理を記述
        override fun handleOnBackPressed() {
	//処理を記述
            return
        }
    }
}

戻るキーを無効化する場合は、handleOnBackPressed内には何も記述しません。

override fun handleOnBackPressed() {
// 何も記述しない
    return
}

おわりに

OnBackPressedDispatcherをつかうことで、戻るキーのボタンクリックイベントを制御することができました。

Discussion