ionic2捕捉android返回键

作者: YuRi_1 | 来源:发表于2017-06-15 10:59 被阅读1129次

本示例是ionic3.3,用了懒加载

  • app.html中,添加#myNav,在app.component.ts文件通过@ViewChild('myNav')获取:
    <ion-nav #myNav [root]="rootPage"></ion-nav>

  • 在app.component.ts中:获取myNav,注册返回事件监听

export class MyApp {
    rootPage: any;
    backButtonPressed: boolean = false; 

    @ViewChild('myNav') nav: Nav;

    constructor(public platform: Platform,
        statusBar: StatusBar,
        splashScreen: SplashScreen,
        public ionicApp: IonicApp,
        public toastCtrl: ToastController,
        public util: UtilService,
        public keyboard: Keyboard,
        public sqlHelp: SqlService) {
        platform.ready().then(() => {
            // Okay, so the platform is ready and our plugins are available.
            // Here you can do any higher level native things you might need.
            statusBar.styleDefault();
            splashScreen.hide();
            this.init();
            this.sqlHelp.createTable();
            this.registerBackButtonAction();
        });
    }
}
  • tabs.html中,添加#mainTabs,在tabs.ts文件通过@ViewChild('mainTabs') tabs:Tabs获取:
<ion-tabs  #mainTabs>
  <ion-tab [root]="tab1Root" tabUrlPath="work" tabTitle="业务" tabIcon="apps"></ion-tab> 
  <ion-tab [root]="tab2Root" tabUrlPath="report" tabTitle="报表" tabIcon="list-box"></ion-tab>
  <ion-tab [root]="tab3Root" tabUrlPath="alarm" tabTitle="提醒" [tabBadge]="tabBadgeNum"
           tabIcon="alarm"></ion-tab>
  <ion-tab [root]="tab4Root" tabUrlPath="setting" tabTitle="设置" tabIcon="settings"></ion-tab>
</ion-tabs>
  • tabs.ts中:
import {Component, ViewChild} from '@angular/core';
import {IonicPage,Tabs} from "ionic-angular";
import {UtilService} from '../../providers/util-service';
@IonicPage()
@Component({
    templateUrl: 'tabs.html'
})
export class TabsPage {
    tabBadgeNum:string;
    // this tells the tabs component which Pages
    // should be each tab's root Page
    @ViewChild('mainTabs') tabs: Tabs;
    tab1Root: any = 'WorkPage';
    tab2Root: any = 'ReportPage';
    tab3Root: any = 'AlarmPage';
    tab4Root: any = 'SettingPage';

    constructor( private utilService: UtilService) {
    }
}
  • app.component.ts写事件:
    registerBackButtonAction() {
        this.platform.registerBackButtonAction(() => {
            if (this.keyboard.isOpen()) {
                //按下返回键时,先关闭键盘
                this.keyboard.close();
                return;
            };
            //如果想点击返回按钮隐藏toast或loading或Overlay就把下面加上
            // this.ionicApp._toastPortal.gaetActive() || this.ionicApp._loadingPortal.getActive() || this.ionicApp._overlayPortal.getActive()
            //不写this.ionicApp._toastPortal.getActive()是因为连按2次退出
            let activePortal = this.ionicApp._modalPortal.getActive() ||this.ionicApp._overlayPortal.getActive();
            let loadingPortal = this.ionicApp._loadingPortal.getActive();
            if (activePortal) {
                //其他的关闭
                activePortal.dismiss().catch(() => {
                });
                activePortal.onDidDismiss(() => {
                });
                return;
            }
            if (loadingPortal) {
                //loading的话,返回键无效
                return;
            }
            let activeVC = this.nav.getActive();
            let page = activeVC.instance;

            if (page instanceof LoginPage || page instanceof WelcomePage) {
                this.platform.exitApp();
                return;
            }
            let tabs = activeVC.instance.tabs;
            let activeNav = tabs.getSelected();
            return activeNav.canGoBack() ? activeNav.pop() : this.showExit();//另外两种方法在这里将this.showExit()改为其他两种的方法的逻辑就好。
        }, 1);
    }

    //双击退出提示框
    showExit() {
        if (this.backButtonPressed) { //当触发标志为true时,即2秒内双击返回按键则退出APP
            this.platform.exitApp();
        } else {
            this.toastCtrl.create({
                message: '再按一次退出应用',
                duration: 2000,
                position: 'bottom',
                cssClass: 'text-align: center'
            }).present();
            this.backButtonPressed = true;
            setTimeout(() => this.backButtonPressed = false, 2000);//2秒内没有再次点击返回则将触发标志标记为false
        }
    }

相关文章

  • ionic2捕捉android返回键

    本示例是ionic3.3,用了懒加载 在app.html中,添加#myNav,在app.component.ts文...

  • 捕捉返回键

    一,两种方式捕捉 1,重写 onBackPressed方法 @Override public void onBac...

  • cordova 物理返回键

    通常Android手机会提供几个物理按键,包括home键、菜单键、返回键、音量键 cordova - 实现点击返回...

  • Android与ios区别

    1、按键 Android:返回键,主菜单,在应用返回中,都可通过返回键回退到上一步 苹果ios:只有home键,所...

  • React-Native-BackAndroid

    BackAndroid 物理返回键的使用 在android上,点击物理返回键时,通常会进行返回上个页面的操作,如果...

  • ionic2/3 处理android返回键失效问题

    参考的方案 我的处理方法是基于小军617 给出的方案,请参考 ionic2实战-完美处理安卓硬件返回按钮https...

  • [Flutter]监听Android返回键事件

    需求监听Android返回键按钮点击事件 实现通过 WillPopScope 可以实现对返回键点击事件的监听,通过...

  • react-native 应用android返回键控制

    android返回键主要代码参考 componentWillMount(){ if (Platform.OS ...

  • ionic2 导航返回按钮

    key: ionic2 navBar 自定义返回按钮ionic2 修改导航的返回按钮事件,通常有两个方法。 方法...

  • 2019-07-09

    项目需要在HTML5 Android App中加入对返回键的处理,发现直接在Activity中加返回键处理代码不起...

网友评论

本文标题:ionic2捕捉android返回键

本文链接:https://www.haomeiwen.com/subject/abuyqxtx.html