iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Android onbackpressed如何实现返回键的拦截和弹窗
  • 933
分享到

Android onbackpressed如何实现返回键的拦截和弹窗

2023-07-04 22:07:26 933人浏览 薄情痞子
摘要

这篇“Android onbackpressed如何实现返回键的拦截和弹窗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看

这篇“Android onbackpressed如何实现返回键的拦截和弹窗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android onbackpressed如何实现返回键的拦截和弹窗”文章吧。

onBackPressed()

这是 activity 中自带的拦截返回的方法;

每当我们按下底部导航的返回键时,就会调用该事件,我们可以通过重写它来阻止 activity 的销毁

譬如下方代码,我们直接把 super 注释掉,那么点击返回键时就不会有任何反应,因为我们并没有针对性的进行响应的事件处理

override fun onBackPressed() {    // super.onBackPressed()}

onBackPressedDispatcher

fragment 没有提供 onBackPressed 方法,故大多数情况下使用 android 推荐的 onBackPressedDispatcher 来进行返回键的拦截操作;

接下来是一个拦截返回并弹窗,询问是否退出的一个小案例;

为便于大家理解,故直接使用 activity 而非 fragment;

首先使用属性委托 lazy,即懒加载的方式定义一个 onBackPressedDispatcher 变量

class NoteActivity : AppCompatActivity() {    private val dispatcher by lazy {        NoteActivity().onBackPressedDispatcher    }    override fun onCreate(savedInstanceState: Bundle?) {        ...    }}

接着在 oncreate 方法中注册 onBackPressedDispatcher

注册的方式即添加一个回调函数用处处理拦截时的动作,使用 addCallback

addCallback 有两个参数,第一个为上下文,第二个为 OnBackPressedCallback 函数方法(下面的代码使用了 lambda 的形式提高效率)

OnBackPressedCallback 函数接收一个参数,我们一般都填 true;

它还需要实现一个方法 handleOnBackPressed ,这里面就是处理对应实践的地方了

在 handleOnBackPressed 方法内:

  • 如果想阻止返回事件,那就什么都不做

  • 如果想允许返回事件,那就使用 finish,结束掉本 activity

override fun onCreate(savedInstanceState: Bundle?) {    ...    dispatcher.addCallback(        this,        object : OnBackPressedCallback(true) {            override fun handleOnBackPressed() {                // 构造一个AlertDialog,具体怎么用不细说                AlertDialog.Builder(this@NoteActivity).apply {                    setTitle("Oops!")                    setMessage("请写上一个标题奥,不然咱没法保存")                    setIcon(R.drawable.ic_info)                    // 点击了确认按钮,直接使用finish销毁本activity                    setPositiveButton("直接退出") { dialog, which ->                        finish()                    }                    // 点了否定,就啥都不做,即不处理返回事件,那自然就不会销毁了                    setNegativeButton("我再想想", null)                }.show()            }        }    )}

最后,在 onBackPressed 中触发 onBackPressedDispatcher (因为返回键点击事件都由 onBackPressed 所拦截,onBackPressedDispatcher 仅仅是充当了一个助手的作用)

注意删掉或者注释原来的的 super,否则你点返回键就直接退出了,那就前功尽弃了!!!

override fun onBackPressed() {    dispatcher.onBackPressed()}

全部代码展示:

package com.zhiyiyi.sqlitedemoimport android.content.DialogInterfaceimport android.database.sqlite.SQLiteDatabaseimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.view.KeyEventimport android.view.MotionEventimport androidx.activity.OnBackPressedCallbackimport androidx.appcompat.app.AlertDialogimport com.zhiyiyi.sqlitedemo.databinding.ActivityNoteBindingimport com.zhiyiyi.sqlitedemo.utils.DBHelperclass NoteActivity : AppCompatActivity() {    private lateinit var binding: ActivityNoteBinding    // 懒加载    private val dispatcher by lazy {        NoteActivity().onBackPressedDispatcher    }    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        binding = ActivityNoteBinding.inflate(layoutInflater)        setContentView(binding.root)        // 注册回调事件        dispatcher.addCallback(            this,            object : OnBackPressedCallback(true) {                override fun handleOnBackPressed() {                    AlertDialog.Builder(this@NoteActivity).apply {                        setTitle("Oops!")                        setMessage("请写上一个标题奥,不然咱没法保存")                        setIcon(R.drawable.ic_info)                        setPositiveButton("直接退出") { dialog, which ->                            finish()                        }                        setNegativeButton("我再想想", null)                    }.show()                }            }        )    }    // 检测返回键点击事件    override fun onBackPressed() {        dispatcher.onBackPressed()    }}

以上就是关于“Android onbackpressed如何实现返回键的拦截和弹窗”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Android onbackpressed如何实现返回键的拦截和弹窗

本文链接: https://www.lsjlt.com/news/347942.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android onbackpressed如何实现返回键的拦截和弹窗
    这篇“Android onbackpressed如何实现返回键的拦截和弹窗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2023-07-04
  • Androidonbackpressed实现返回键的拦截和弹窗流程分析
    目录前言onBackPressed()onBackPressedDispatcher前言 此文章主要解决拦截用户点击手机底部导航栏中的返回键时该事件的拦截; 此方法依然可以适用于fr...
    99+
    2023-01-04
    Android onbackpressed拦截返回键 Android onbackpressed弹窗
  • Android 拦截返回键事件的实例详解
    Android 拦截返回键事件的实例详解KeyEvent类Android.View.KeyEvent类中定义了一系列的常量和方法,用来描述Android中的按键事件和返回键有关的常量和方法有。 KeyEvent.KEYCODE_BACK...
    99+
    2023-05-30
    android 拦截 返回键
  • React Native之如何实现Android的返回键BackAndroid
    这篇文章主要介绍React Native之如何实现Android的返回键BackAndroid,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码:// BackAndroidTool //&nbs...
    99+
    2023-05-30
    reactnative android
  • 如何实现ajax回调打开新窗体防止浏览器拦截
    这篇文章主要介绍如何实现ajax回调打开新窗体防止浏览器拦截,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!ajax回调打开新窗体防止浏览器拦截,就这么做!问题剖析:function&...
    99+
    2024-04-02
  • Android Studio如何实现弹窗设置
    这篇文章主要介绍“Android Studio如何实现弹窗设置”,在日常操作中,相信很多人在Android Studio如何实现弹窗设置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”And...
    99+
    2023-06-30
  • Android中怎么实现长按返回键弹出关机框功能
    Android中怎么实现长按返回键弹出关机框功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。找到PhoneWindowManager.java文件,在fram...
    99+
    2023-05-30
    android
  • layer如何实现弹窗在键盘按回车将反复刷新
    这篇文章将为大家详细讲解有关layer如何实现弹窗在键盘按回车将反复刷新,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。layer.open当弹窗后,点击弹窗身体的任意部位...
    99+
    2024-04-02
  • Android 应用中如何实现按返回键后台运行
    这篇文章将为大家详细讲解有关Android 应用中如何实现按返回键后台运行,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android应用开发按下返回键退向后台运行我们日常使用的很多Andr...
    99+
    2023-05-31
    android 返回键 后台运行
  • 如何在Android应用中实现一个返回键功能
    今天就跟大家聊聊有关如何在Android应用中实现一个返回键功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除...
    99+
    2023-05-31
    android roi
  • Android隐私协议提示弹窗如何实现
    这篇“Android隐私协议提示弹窗如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android隐私协议提示弹窗如何...
    99+
    2023-07-05
  • Android 13.0 USB鼠标右键改成返回键的功能实现
    1.概述 在13.0设备定制化开发中,产品有好几个usb口,用来可以连接外设,所以USB鼠标通过usb口来控制设备也是常见的问题,在window系统中,鼠标右键是返回键的功能,可是android原生的系统 鼠标右键不是返回键根据产品开发需要...
    99+
    2023-10-21
    android java 鼠标右键 usb鼠标 framework
  • Android 如何实现弹窗顺序&优先级控制
    一般在项目首页中,往往会有多个对话框需要弹出,比如活动弹窗、更新弹窗、评分弹窗等等,而且这些弹窗是有优先级顺序的。这些弹窗一般是通过接口请求后返回结果再显示的,如果只有几个弹窗还好处...
    99+
    2024-04-02
  • Springboot 如何实现filter拦截token验证和跨域
    Springboot filter拦截token验证和跨域 背景 web验证授权合法的一般分为下面几种 使用session作为验证合法用户访问的验证方式 使用自己实...
    99+
    2024-04-02
  • Spring MVC如何实现的登录拦截器
    小编给大家分享一下Spring MVC如何实现的登录拦截器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!定义拦截器    ...
    99+
    2023-05-31
    springmvc
  • Android仿iOS如何实现侧滑返回功能
    这篇文章将为大家详细讲解有关Android仿iOS如何实现侧滑返回功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先上个效果再说:原理Activity 本身是不可以滑动的,但是我们可以制造一个正在滑动 ...
    99+
    2023-05-30
  • 利用Mybatis如何实现返回插入的主键id
    利用Mybatis如何实现返回插入的主键id?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在mapper的xml文件中配置  useGeneratedKeys以及 k...
    99+
    2023-05-31
    mybatis 主键id
  • 在android使用PopupWindow时出现返回键消失如何解决
    在android使用PopupWindow时出现返回键消失如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。preparePopup方法。 public void sh...
    99+
    2023-05-31
    popupwindow android roi
  • 在微信公众号开发中如何实现浏览器左上角返回按钮拦截功能
    小编给大家分享一下在微信公众号开发中如何实现浏览器左上角返回按钮拦截功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在微信公众号开发中,有时需要对浏览器左上角返回按钮进行拦截处理相关的页...
    99+
    2024-04-02
  • Android如何实现仿微信右滑返回功能
    这篇文章将为大家详细讲解有关Android如何实现仿微信右滑返回功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先上效果图,如下:先分析一下功能的主要技术点,右滑即手势判断,当滑到一直距离时才执行返回,...
    99+
    2023-05-30
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作