E:\edison\zhyshop_app\platforms\android\WeexFrameworkWrapper\wxframework\eros-framework\src\main\java\com\eros\framework\adapter\router\DefaultRouterAdapter.java
private MainActivity getTabActivityFromStack(String url) {
Stack<Activity> activities = RouterTracker.getActivities();
Log.i("newlog", "activitie length:" + activities.size());
int size = activities.size();
for(int i=0; i < size; ++i){
MainActivity prev_activity = (MainActivity) activities.get(i);
String activity_url = prev_activity.getUrl();
Log.i("newlog", "activitie_url:" + activity_url);
if (url.equals(activity_url)) {
return prev_activity;
}
}
return null;
}
private void removeNotTabActivity(String except){
PlatformConfigBean.TabBar tabBar = BMWXEnvironment.mPlatformConfig.getTabBar();
List<PlatformConfigBean.TabItem> items = tabBar.getList();
Stack<Activity> activities = RouterTracker.getActivities();
int size = activities.size();
for(int i=0; i < size; ++i){
MainActivity prev_activity = (MainActivity) activities.get(i);
String activity_url = prev_activity.getUrl();
for(int j =0;j < items.size(); j++){
PlatformConfigBean.TabItem item = items.get(j);
String path = item.getPagePath();
Log.i("newlog", "tab path:" + path);
if (!path.equals(activity_url) && !activity_url.equals(except)) {
RouterTracker.removeActivity(prev_activity);
Log.i("newlog", "remove activity_url:" + activity_url);
break;
}
}
}
}
private void switchTabActivity(String url) {
Log.i("newlog", "current url:" + url);
MainActivity prev_activity =(MainActivity) RouterTracker.peekActivity();
while (prev_activity != null) {
String activity_url = prev_activity.getUrl();
Log.i("newlog", "activity_url:" + activity_url);
if(!activity_url.equals(url)){
RouterTracker.removeActivity(prev_activity);
prev_activity = (MainActivity) RouterTracker.peekActivity();
}else{
return;
}
}
}
private boolean performStartActivity(Activity activity, RouterModel routerModel, String
bmpageCategory) {
String pathUrl = routerModel.url;
if (TextUtils.isEmpty(pathUrl)) return false;
Uri pathUri = Uri.parse(pathUrl);
if (!TextUtils.equals("http", pathUri.getScheme()) && !TextUtils.equals("https", pathUri
.getScheme())) {
pathUri = Uri.parse(BMWXEnvironment.mPlatformConfig.getUrl().getJsServer() +
"/dist/js" + pathUrl);
}
MainActivity tabActivity = null;
if (routerModel.gesBack && routerModel.canBack && routerModel.navTitle.equals("00")) {
tabActivity = getTabActivityFromStack(routerModel.url);
}
Log.i("newlog", tabActivity != null ? "hasTabActivity" : "not hasTabActivity");
if (tabActivity == null) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(Constant.ROUTERPARAMS, routerModel);
intent.setData(pathUri);
intent.addCategory(bmpageCategory);
activity.startActivity(intent);
if (Constant.ACTIVITIES_ANIMATION.ANIMATION_PUSH.equals(routerModel.type)) {
activity.overridePendingTransition(R.anim.right_in, R.anim.view_stay);
} else if (Constant.ACTIVITIES_ANIMATION.ANIMATION_PRESENT.equals(routerModel
.type)) {
activity.overridePendingTransition(R.anim.bottom_in, R.anim.view_stay);
} else if (Constant.ACTIVITIES_ANIMATION.ANIMATION_TRANSLATION.equals(routerModel
.type)) {
activity.overridePendingTransition(R.anim.left_in, R.anim.view_stay);
} else {
activity.overridePendingTransition(R.anim.right_in, R.anim.view_stay);
}
}
if (routerModel.gesBack) {
Log.i("newlog", "routerModel.gesBack=true");
Log.i("newlog", routerModel.url);
//reLaunch
if (!routerModel.canBack) {
Activity prev_activity = RouterTracker.peekActivity();
while (prev_activity != null) {
RouterTracker.removeActivity(prev_activity);
prev_activity = RouterTracker.peekActivity();
}
} else {
if (routerModel.navTitle.equals("00")) { //switchTab
Log.i("newlog", "switchTab");
if(tabActivity != null){
removeNotTabActivity(routerModel.url);
switchTabActivity(routerModel.url);
}
} else {
//redirectTo
Activity prev_activity = RouterTracker.peekActivity();
if (prev_activity != null) {
RouterTracker.removeActivity(prev_activity);
}
}
}
}
return true;
}
E:\edison\zhyshop_app\platforms\android\WeexFrameworkWrapper\wxframework\eros-framework\src\main\java\com\eros\framework\activity\MainActivity.java
public String getUrl(){
return routerModel.url;
}
E:\edison\zhyshop_app\platforms\android\WeexFrameworkWrapper\nexus\nexus\src\main\java\com\eros\framework\adapter\router\RouterTracker.java
/**
* 新添加的
* @return
*/
public static Stack<Activity> getActivities(){
if (mTotal.isEmpty()) return null;
ActivityStackFrame peek = mTotal.peek();
return peek.getActivities();
}
JS端
E:\edison\zhyshop_app\src\js\mediator\index.vue
var tabbar = weex.requireModule('bmTabbar');
var pages = [
"/pages/home/home", "/base/electricitylist/electricitylist",
"/pages/mine/mine", "/pages/guest/guest"
];
var lists = [];
for (var i = 0; i < pages; i++) {
lists.push({pagePath: "/pages" + pages[i] + ".js"});
}
tabbar.setInfo({
'list': lists
})
E:\edison\zhyshop_app\src\js\pages\common\wx.js
function routerOpen(options,isSwitchTab) {
_savePrevPagePath();
var router = weex.requireModule('bmRouter');
const currentPageInfo = getUrl(options.name)
if (!currentPageInfo || !currentPageInfo.url) return
if (options.navShow === true) {
//setStorageSync("has_status_bar",0);
pushPage(currentPageInfo.url, 0);
} else {
// setStorageSync("has_status_bar",1);
pushPage(currentPageInfo.url, 1);
}
let preOptions = {
url: currentPageInfo.url,
type: options.type || 'PUSH',
params: options.params || {},
canBack: options.canBack != undefined ? options.canBack : false,
gesBack: options.gesBack || false,
navShow: options.navShow != undefined ? options.navShow : !!currentPageInfo.title,
navTitle: options.navTitle != undefined ? options.navTitle : currentPageInfo.title,
isRunBackCallback: false,
}
if(isSwitchTab != undefined){
preOptions.navTitle = preOptions.navTitle + " ";
}
if (siteinfo.window.navigationBarTextStyle == "black") {
preOptions.statusBarStyle = "Default";
} else {
preOptions.statusBarStyle = "LightContent";
}
router.open(preOptions, (data) => {
})
}
function switchTab(obj) {
// return reLaunch(obj);
setStorageSync("w_system_navigation_bar", 0);
obj = _getUrl(obj);
var home = siteinfo.app_set.setting.home.replace(/\//g, ".");
if (obj.name == home) {
obj.navShow = false;
} else {
obj.navShow = true;
setStorageSync("w_system_navigation_bar", 1);
}
obj.statusBarStyle = 'LightContent';
obj.canBack = true;
obj.gesBack = true;
return routerOpen(obj,1);
}
demo
E:\edison\zhyshop_app\src\js\pages\pages\home\home.vue
<template>
<scroller ref="list" :style="page_style">
<refresh class="refresh" @refresh="onrefresh" :display="refreshing ?'show':'hide'">
<text class="indicator-text">正在刷新 ...</text>
<loading-indicator class="indicator"></loading-indicator>
</refresh>
<text @click="click" style="padding:20px;font-size:50px;">跳转第二页</text>
<text v-for="(num, index) in arr" class="text">这是第 {{num}} 条数据</text>
</scroller>
</template>
<style scoped>
.text {
font-size: 50px;
}
.refresh {
width: 750px;
position: absolute;
height: 120px;
top: 0;
align-items: center;
}
.indicator-text {
color: #888888;
font-size: 42px;
text-align: center;
}
.indicator {
margin-top: 16px;
height: 40px;
width: 40px;
color: blue;
}
</style>
<script>
import wx from './../../common/wx'
import console from './../../common/console'
export default {
data() {
return {
arr: [],
refreshing: false
}
},
mixins: [require('./../../common/publish').publish],
created() {
this.getData();
},
computed: {
page_style: function () {
var statusBarHeight = weex.config.eros.statusBarHeight ? weex.config.eros.statusBarHeight : 40;
return {paddingTop: statusBarHeight};
}
},
methods: {
click() {
wx.switchTab({url: "/base/electricitylist/electricitylist"})
},
getData() {
this.arr = [];
var random = Math.random();
for (let i = 0; i < 30; i++) {
this.arr.push(random + i + 1)
}
},
onrefresh() {
this.refreshing = true;
setTimeout(() => {
this.getData();
this.refreshing = false;
}, 1000)
}
}
}
</script>
E:\edison\zhyshop_app\src\js\pages\base\electricitylist\electricitylist.vue
<template>
<scroller ref="list" :style="page_style">
<refresh class="refresh" @refresh="onrefresh" :display="refreshing ?'show':'hide'">
<text class="indicator-text">正在刷新 ...</text>
<loading-indicator class="indicator"></loading-indicator>
</refresh>
<text @click="click" style="padding:20px;font-size:50px;">跳转第一页</text>
<text v-for="(num, index) in arr" class="text">这是第 {{num}} 条数据</text>
</scroller>
</template>
<style scoped>
.text {
font-size: 50px;
}
.refresh{
width: 750px;
position: absolute;
height: 120px;
top: 0;
align-items: center;
}
.indicator-text {
color: #888888;
font-size: 42px;
text-align: center;
}
.indicator {
margin-top: 16px;
height: 40px;
width: 40px;
color: blue;
}
</style>
<script>
import wx from './../../common/wx'
import console from './../../common/console'
export default {
data() {
return {
arr: [],
refreshing: false
}
},
mixins: [require('./../../common/publish').publish],
created() {
this.getData();
},
computed:{
page_style:function(){
var statusBarHeight = weex.config.eros.statusBarHeight ? weex.config.eros.statusBarHeight : 40;
return {paddingTop: statusBarHeight};
}
},
methods: {
click(){
wx.switchTab({url:"/pages/home/home"})
},
getData(){
this.arr = [];
var random = Math.random();
for (let i = 0; i < 30; i++) {
this.arr.push(random + i + 2)
}
},
onrefresh() {
this.refreshing = true;
setTimeout(() => {
this.getData();
this.refreshing = false;
}, 1000)
}
}
}
</script>