Weex Android SDK源码分析之Module(navigator)
2016-06-18 16:49
375 查看
前言
之前已经介绍了module中的model,本篇博文介绍Weex Moudle中的navigator使用与源码分析。代码分析
Weex封装了一系列的navigator api,例如:push, pop.push
weex codepush(options, callback) Arguments url(stirng): 界面Url路径. animated(string): 界面跳转动画. callback(object): 跳转成功回调. Example var params = { 'url': 'navigator-demo.js', 'animated' : 'true', } var navigator = require('@weex-module/navigator'); navigator.push(params, function(e) { //callback });
android code
private final static String TAG = "Navigator"; private final static String WEEX = "com.taobao.android.intent.category.WEEX"; private final static String URL = "url"; @WXModuleAnno public void push(String param, final String callbackId) { if (WXSDKEngine.getActivityNavBarSetter() != null) { if (WXSDKEngine.getActivityNavBarSetter().push(param)) { WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_SUCCESS); return; } } try { JSONObject jsonObject = new JSONObject(param); String url = jsonObject.optString(URL, ""); if (!TextUtils.isEmpty(url)) { Uri rawUri = Uri.parse(url); String scheme = rawUri.getScheme(); Uri.Builder builder = rawUri.buildUpon(); if (TextUtils.isEmpty(scheme)) { builder.scheme("http"); } Intent intent = new Intent(Intent.ACTION_VIEW, builder.build()); intent.addCategory(WEEX); intent.putExtra(WXNavigatorActivity.INSTANCE_ID, mWXSDKInstance.getInstanceId()); mWXSDKInstance.getContext().startActivity(intent); WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_SUCCESS); } } catch (Exception e) { WXLogUtils.e(TAG, WXLogUtils.getStackTrace(e)); WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_FAILED); } }
1、检查是否定义IActivityNavBarSetter接口,如果有交由ActivityNavBarSetterImpl自身处理,否则执行默认跳转;
注意:
在使用push操作的Activity引入了“com.taobao.android.intent.category.WEEX”的 category,需要在mainfest的Activity中加上如下配置:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="com.taobao.android.intent.category.WEEX"/> <data android:scheme="http"/> <data android:scheme="https"/> <data android:scheme="file"/> </intent-filter>
pop
weex codeArguments animated(string): 关闭动画. callback(object): 回调. Example var params = { 'animated' : 'true', } var navigator = require('@weex-module/navigator'); navigator.pop(params, function(e) { //callback });
android code
@WXModuleAnno public void pop(String param, final String callbackId) { if (WXSDKEngine.getActivityNavBarSetter() != null) { if (WXSDKEngine.getActivityNavBarSetter().pop(param)) { WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_SUCCESS); return; } } if (mWXSDKInstance.getContext() instanceof Activity) { ((Activity) mWXSDKInstance.getContext()).finish(); } }
1、检查是否定义IActivityNavBarSetter接口,如果有交由ActivityNavBarSetterImpl自身处理,否则直接关闭;
相关文章推荐
- Android Spinner值不显示,选择列表正常
- Android之SQLite登录注册与EditText清除功能
- Android 手机设置中的关于手机界面
- android提供ToolBar实现划动菜单的陷阱
- Android系统默认Home(Launcher)的启动过程小结
- Android 内容观察者的原理
- Android自动获取短信验证码
- 了解使用Android ConstraintLayout
- Retrofit与RxAndroid结合使用
- Android Scroll分析(二)——滑动的几种方法
- Weex Android SDK源码分析之Module(modal)
- canvas的save,restore方法的使用理解
- 安卓侧边栏实现
- Android中ListView长按事件和点击事件的冲突问题
- Android官方文档之Animation
- 简单的朋友圈界面-Android(一)
- Android AsyncTask
- Android——初识RxJava
- Android应用开发-数据存储和界面展现(二)
- Android中生成xml文件小demo