博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Weex控制Android返回键解决方案
阅读量:6303 次
发布时间:2019-06-22

本文共 3307 字,大约阅读时间需要 11 分钟。

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

需求

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

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

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

解决方案

Android和Weex的通信

Android to Weex

使用的是来实现的。我们在 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的通信使用来实现。通过在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,解决方案为,这篇文章让我可以非常优雅的管理我的Activity。简单写下用法.

1. 在每个Activity的onCreate方法中将Activity对象添加到List中

@Overrideprotected 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、移动前端相关的博文。欢迎大家关注我,我会用心维护和经营好博客,多产出高质量文章。同时也希望我所写的东西可以帮到有需要的朋友。

新浪微博:
掘金:
CSDN:
简书:
Github:

转载地址:http://igfxa.baihongyu.com/

你可能感兴趣的文章
JEESZ分布式架构1--CentOs下安装jdk7(环境准备)
查看>>
ssdb
查看>>
linux 路由转发实验(软路由)
查看>>
37条常用Linux Shell命令组合
查看>>
计算机技术发展时间表|图解
查看>>
我的友情链接
查看>>
struts 异常机制
查看>>
SAP 携手新松机器人,以全新模式打造工业互联网生态系统
查看>>
QQ以及微信中当前网页提示已停止访问该如何解决,如何能恢复访问?
查看>>
linux系统和Windows系统共存
查看>>
LeetCode:476. Number Complement
查看>>
Python的输入指令、格式化输出、基本运算符
查看>>
【爬虫】在Xpath中使用正则
查看>>
3D分子构型该怎么优化
查看>>
Python list 数据类型:列表
查看>>
7)查找[2]二叉排序树以及查找
查看>>
less学习笔记
查看>>
在github上写博客
查看>>
Friendly Filmic Tonemapping
查看>>
我的友情链接
查看>>