开发者

Intercepting the back button

I'm writing an application which will have two Activities, when the user presses the back button on the second activity a dialog should pop up asking the user to confirm the action. So how do I intercept this? I seriously doubt about this coz the backstack is a part of the OS itself. Has anyone found a开发者_开发问答 workaround?


In an activity you can just override

onBackPressed()

edit: that is api lvl 5+ :/ for 4 and below you gotta override onKeyDown()


Simply override the onKeyDown(int, KeyEvent) method in your activity and look for the back button. Return true so that the event is consumed.

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        //Do something here
        return true;
    }
    return super.onKeyDown(keyCode, event);
}


As schwiz pointed out, you'll want to override the onBackPressed() method in your activity class (http://developer.android.com/reference/android/app/Activity.html#onBackPressed()).

I just wanted to add that if you did want to at some stage continue with or access the standard the back operation (after say, displaying a dialog), then you simply call super.onBackPressed() or ActivityName.super.onBackPressed() from anywhere in the Activity.


By the docs, do not use onBackPressed if you can. Now is recommended using onBackPressedDispatcher.addCallback(this) {}. There's a Fragment example:

class MyFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // This callback will only be called when MyFragment is at least Started.
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // Handle the back button event
        }

        // The callback can be enabled or disabled here or in the lambda
    }
    ...
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜