概述
在一些场景中需要在选择内容后回传,例如地址选择、日期选择等。
如果用两个页面来传递信息会使逻辑变得复杂,所以我们在开发过程中选择添加一个蒙层来进行选择操作(我们使用weex-ui的wxc-popup)。
但是这会带来另一个问题,在android手机上按返回键时整个页面都会返回,所以我们写了一个module来进行back按钮的监听。
android代码部分
创建BackEventModule
public class BackEventModule extends WXModule {
// 存放 InstanceId 和对应的 JSCallback
public static final HashMap<String, JSCallback> backListener = new HashMap<>();
@JSMethod
public void addBackEventListener(JSCallback callback) {
backListener.put(mWXSDKInstance.getInstanceId(), callback);
}
@JSMethod
public void removeBackEventListener() {
backListener.remove(mWXSDKInstance.getInstanceId());
}
// 给activity在onBackPressed()中调用
public static boolean fireBackEvent(WXSDKInstance mInstance) {
if (XDEventModule.backListener.containsKey(mInstance.getInstanceId())) {
JSCallback callback = XDEventModule.backListener.get(mInstance.getInstanceId());
if (null != callback) {
Map<String, Boolean> result = new HashMap<>();
result.put("ok", true);
callback.invoke(result);
}
return true;
}
return false;
}
}
在WXPageActivity添加处理代码
@Override
public void onBackPressed() {
//mInstance 为 WXSDKInstance 实例
if (BackEventModule.fireBackEvent(mInstance)) {
return;
}
super.onBackPressed();
}
// 如果有其他activity也加载weex页面,也需要添加此段代码
在weex中使用
// 以下为示例代码
openPopup(){
// 打开Popup时增加监听
if(this.isAndroid){
const backEvent = weex.requireModule('backEvent');
backEvent.addBackEventListener(e=>{
// back按钮事件监听回调中隐藏Popup
hideAddressPopup();
})
}
},
hidePopup(){
// 隐藏Popup方法中移除监听,使back按钮能恢复原有逻辑
if(this.isAndroid){
const backEvent = weex.requireModule('backEvent');
backEvent.removeBackEventListener();
}
},
isAndroid() {
let {platform} = weex.config.env
return platform.toLowerCase() === 'android'
},
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。