Nativescript-Android禁用物理设备后退按钮

时间:2018-11-14 08:04:21

标签: android nativescript back

我正在尝试仅在某些屏幕中将物理设备禁用回android中。尝试下面的代码不起作用。有想法吗?

import { RouterExtensions } from "nativescript-angular";
  import * as application from "application";
  import { AndroidApplication, AndroidActivityBackPressedEventData } from "application";
  import { isAndroid } from "platform";

  export class ItemComponent implements OnInit {
    constructor(private router: Router) {}

    ngOnInit() {
      if (!isAndroid) {
        return;
      }
      application.android.on(AndroidApplication.activityBackPressedEvent, (data: AndroidActivityBackPressedEventData) => {

          data.cancel = true; // prevents default back button behavior

      });
    }
  }

4 个答案:

答案 0 :(得分:0)

@Override
public void onBackPressed() {
   if (!shouldAllowBack()) {
       doSomething();
   } else {
       super.onBackPressed();
   }
}

答案 1 :(得分:0)

将此代码添加到您的活动中-

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
       // Your Code Here. Leave empty if you want nothing to happen on back press.

}

有关更多信息,请访问this链接。

答案 2 :(得分:0)

“后退”按钮在“活动”级别进行控制,NativeScript使用一个“活动”,而您的所有页面/路由都是其中的片段。

因此您不必在每个页面/组件上都调用它。将侦听器添加到您的应用程序组件,然后检查路由器以了解您所在的页面并取消向后事件。

答案 3 :(得分:0)

使用location并检查位置是否包含要在其中使用自定义功能的所需路径(如路由文件中所述)。

import { Location } from '@angular/common';

构造函数(私有_location:位置        ){}

if (application.android) {
            application.android.on(AndroidApplication.activityBackPressedEvent, (data: AndroidActivityBackPressedEventData) => {
                const path = this._location.path();

            console.log(`path i s--> ${path}`);
            switch (path) {
                case '/Screen 1':
                    data.cancel = true;
                    break;
                case '/Screen 2':
                    //do something else
                    break;
            });
        }