当前位置: 首页 > news >正文

Android开发中,Vue 3处理回退按键事件

vue3有一些变化,按照网上有些文章的方法,发现行不通,通过一段时间的打印、尝试后,发现以下方法可行。

第一步)首先定义一个处理回退事件的js函数,一定是vue.methods中的函数,否则找不到this,或者找不到router,其次,在mounted事件中将它映射成全局js函数;在此函数中判断是router.back还是退出Activity,通过返回值告诉Activity。

const app = Vue.createApp({
provide:{tags:tags, service:service},
created(){
    this.$router.push('/home').catch(err => {err})
},
mounted() {

    window.sys_go_back = this.sysGoBack;//声明全局函数,在Activity中调用
},
methods:{
sysGoBack() {
    //实现按回退按钮回退历史页面,如果无历史,则退出activity或应用

    //注意这里有变化,不能用this.$router.currentRoute.path
    if(this.$router.currentRoute.value.path==="/home") {
        return false;
    }
    this.$router.back();
    return true;
}
}
});

第二步)在用了Webview的Activity中处理onBackPressed事件,调用全局的sys_go_back函数,如果返回true,则不做什么事情,否则执行Activity的回退。

    @Override
    public void onBackPressed () {
        LOG.debug("onBackPressed");
        if(webview == null) {
            super.onBackPressed();
            return;
        }

        //注意这里使用了CompletableFuture,所以至少需要用java 8

        //使用CompletableFuture,可以解决很多Android中调用跟回调分离十万八千里的问题
        jsGoBack().whenCompleteAsync((hasHistory, e) -> {
            LOG.debug("sys_go_back return {}", hasHistory);
            if(hasHistory) {
                return;
            }
            runOnUiThread(super::onBackPressed);
        });
    }

    /**
     * 先判断vue中是否有历史可回退,如果有则执行vue的back,并返回true,否则直接返回false
     * @return 是否存在可回退的历史页面
     */
    private CompletableFuture<Boolean> jsGoBack() {
        LOG.debug("Call vueGoBack");
        CompletableFuture<Boolean> result = new CompletableFuture<>();
        webview.evaluateJavascript("javascript:sys_go_back()", value -> {
            LOG.debug("sys_go_back() return {}", value);
            result.complete(ValParser.parseBool(value, false));
        });

        return result;
    }

http://www.lryc.cn/news/292208.html

相关文章:

  • three.js CSS3DRenderer、CSS3DSprite渲染HTML标签
  • 【BBF系列协议】TR369管理平台软件设计
  • 微信小程序 仿微信聊天界面
  • 中国社会科学院大学-新加坡社科大学 招生简章
  • js中继承的详解(一文读懂)
  • Android studio使用svg矢量图
  • 《Access Path Selectionin a Relational Database Management System》论文笔记
  • 【AI_Design】Midjourney学习笔记
  • 面试宝典之深谈JVM
  • idea配置tomcat
  • 【MyBatis】操作数据库——入门
  • 免费分享一套SpringBoot+Vue药店(药房)管理系统,帅呆了~~
  • 视频怎么加水印?分享两个简单的加水印的方法
  • Apache Commons Collection3.2.1反序列化分析(CC1)
  • MySQL入门篇(10)-聚合函数的应用
  • Vue3基本概念
  • 每日OJ题_算法_模拟①_力扣1576. 替换所有的问号
  • 杂题——试题 算法训练 区间最大和
  • (安卓)跳转应用市场APP详情页的方式
  • 亚信安全助力宁夏首个人工智能数据中心建成 铺设绿色算力安全底座
  • ASP.NET Core WebAPI_解决跨域问题(前端后端)
  • 保姆级的指针详解(超详细)
  • R-YOLO
  • Qt无边框窗口拖拽和阴影
  • ES6 Proxy详解
  • Prompt Learning 的几个重点paper
  • 中科大计网学习记录笔记(三):接入网和物理媒体
  • 设计模式:工厂方法模式
  • HTML 相关知识点记录
  • 系统架构设计师考试大纲2023