资讯专栏INFORMATION COLUMN

Weex控制Android返回键解决方案

Salamander / 2752人阅读

摘要:当页面不在首页上时,返回上一页面。当页面在首页是,关闭当前应用解决方案和的通信使用的是来实现的。我们在的返回按钮事件中触发,在中监听该。通过在中创建并在中注册后,调用该触发事件。

正在深入倒腾weex,希望可以将weex用在项目中。这里找出了weex控制Android返回键的方法。

需求

项目使用的是Vue+VueRouter的单页应用来写Weex的,现有以下需求。

当页面不在首页上时,返回上一页面。 this.$router.go(-1)

当页面在首页是,关闭当前Android应用

解决方案 Android和Weex的通信 Android to Weex

使用的是globalEvent来实现的。我们在 Android 的返回按钮事件中触发 globalEvent,在 Weex 中监听该 globalEvent

Android

public void onBackPressed(){
  Map params=new HashMap<>();
  params.put("name","returnmsg");
  mWXSDKInstance.fireGlobalEventCallback("androidback",params);
}

Weex

globalEvent.addEventListener("androidback", function (e) {
  // 这里就可以做返回事件操作了,如返回上一页或退出应用
  // that.$router.go(-1)
  // weex.requireModule("close").closeApp()
})
Weex to Android

而Weex对Android的通信使用Module扩展来实现。通过在Android中创建WXModule并在Application中注册后,Weex调用该Module触发Android事件。下面我们来一步步实现。

1. Android中创建CloseModule

public class CloseModule extends WXModule {

    @JSMethod(uiThread = false)
    public void closeApp() {
        LogUtil.e("触发关闭效果");
        CacheActivity.finishActivity();
    }
}

2. 在Application中注册Module

public class WXApplication extends Application {

  @Override
  public void onCreate() {
    super.onCreate();
    InitConfig config = new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build();
    WXSDKEngine.initialize(this, config);
    try {
      ...
      WXSDKEngine.registerModule("close", CloseModule.class);
      ...
    } catch (WXException e) {
      e.printStackTrace();
    }
  }
}

3. 在Weex中使用

weex.requireModule("close").closeApp()

这样调用Module之后就可以对Android做许多事情了。

退出Activity

这里我还遇到了一个问题,就是在Weex提供的WXModule中如何退出Activity,解决方案为android 关闭多个或指定activity,这篇文章让我可以非常优雅的管理我的Activity。简单写下用法.
1. 在每个Activity的onCreate方法中将Activity对象添加到List中

@Override
protected void onCreate(Bundle savedInstanceState) {
  ...
  CacheActivity.addActivity(NetworkActivity.this);
}

2. 在Module中去关闭Activity

CacheActivity.finishActivity();

3. 当然,别忘了把CacheActivity的代码贴到项目中去

package com.weex.sample.utlis;

import android.app.Activity;
import java.util.LinkedList;
import java.util.List;

public class CacheActivity {
    public static List activityList = new LinkedList();

    public CacheActivity() {

    }

    /**
     * 添加到Activity容器中
     */
    public static void addActivity(Activity activity) {
        if (!activityList.contains(activity)) {
            activityList.add(activity);
        }
    }

    /**
     * 便利所有Activigty并finish
     */
    public static void finishActivity() {
        for (Activity activity : activityList) {
            activity.finish();
        }
    }

    /**
     * 结束指定的Activity
     */
    public static void finishSingleActivity(Activity activity) {
        if (activity != null) {
            if (activityList.contains(activity)) {
                activityList.remove(activity);
            }
            activity.finish();
            activity = null;
        }
    }

    /**
     * 结束指定类名的Activity 在遍历一个列表的时候不能执行删除操作,所有我们先记住要删除的对象,遍历之后才去删除。
     */
    public static void finishSingleActivityByClass(Class cls) {
        Activity tempActivity = null;
        for (Activity activity : activityList) {
            if (activity.getClass().equals(cls)) {
                tempActivity = activity;
            }
        }

        finishSingleActivity(tempActivity);
    }

}

Over!继续倒腾Weex中……遇到问题继续总结。欢迎留言交流~

关于作者

VioletJack,移动、前端工程师,两年移动端工作经验、一年前端工作经验。现专注于移动前端的学习和开发。擅长Android开发和Vue前端开发。会定期产出关于Android、Vue、移动前端相关的博文。欢迎大家关注我,我会用心维护和经营好博客,多产出高质量文章。同时也希望我所写的东西可以帮到有需要的朋友。
新浪微博: http://weibo.com/u/2640909603
掘金:https://gold.xitu.io/user/571...
CSDN: http://blog.csdn.net/violetja...
简书: http://www.jianshu.com/users/...
Github: https://github.com/violetjack

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13755.html

相关文章

  • Weex Android 返回 页面传值 生命周期

    摘要:问题安卓返回键页面之间传参数页面生命周期实现页面根节点页面页面传参页面传参数页面激活页面传参页面失活实现开源 问题 安卓返回键 页面之间传参数 Vue页面生命周期 vue.js实现 //页面根节点 methods: { //页面ready 页面传参 ready(param){ ...

    impig33 评论0 收藏0
  • weex-android添加返回按钮监听

    摘要:概述在一些场景中需要在选择内容后回传,例如地址选择日期选择等。但是这会带来另一个问题,在手机上按返回键时整个页面都会返回,所以我们写了一个来进行按钮的监听。 概述 在一些场景中需要在选择内容后回传,例如地址选择、日期选择等。 如果用两个页面来传递信息会使逻辑变得复杂,所以我们在开发过程中选择添加一个蒙层来进行选择操作(我们使用weex-ui的wxc-popup)。 但是这会带来另一...

    yzd 评论0 收藏0
  • Android」 详细全面的基于vue2.0Weex接入过程(Android视角)

    摘要:所以需要自己实现,并注册。处理逻辑统一,方便管理,方便动态配置。点击切换页面时,如对应的已渲染,则直接取出来显示。支持统一跳转协议,对应目前端的统一跳转协议里的,有必要的时候可以替换原来的页面,解决页面错误不能及时修复的问题。 本文来自尚妆Android团队路飞发表于尚妆github博客,欢迎订阅! 一、说在前面的话 目前weex已在尚妆旗下的达人店app上线了一个常用的订单管理页面,...

    joy968 评论0 收藏0
  • 网易严选App感受Weex开发(已完结)

    摘要:如果你尚不了解,并想简单入门,可以阅读整理快速入门笔记网易严选感受开发什么都不说,先给你感受下的效果。此处对寄有厚望单位中的所有属性值的单位均为,也可省略不写,系统会默认为单位。 showImg(https://segmentfault.com/img/remote/1460000012869672); 自打出生的那一天起,Weex 就免不了被拿来同 React Native「一决高下...

    jaysun 评论0 收藏0
  • Weex系列(序) —— 总要知道原生的一点东东(Android)

    摘要:开发工具选用的是。就是安卓所要用到的库框架目录下的这个文件用的比较多,这个文件里面可以修改的唯一,版本号,所用到的库,签名等。在里面有一个,这也是安卓应用交互之间很重要的一个点,扩展起来能讲的很多,下面我就简单提一下。 Android开发工具选用的是Android Studio。下面只是简单介绍,如果你本就是一个原生开发工程师,当然是跳过了。 JDK 下载jdk相关资源,安装好之后,在...

    pekonchan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<