【问题标题】:Codename one-hardware Native back button to go previous pageCodename one-hardware Native 后退按钮去上一页
【发布时间】:2018-07-17 14:16:38
【问题描述】:

在 Codename one 应用程序中,我们如何从本机(设备上的硬件后退按钮)建立后退命令,以返回到以前的形式? 大多数机器人都有一个原生的后退按钮,但是当我在应用程序中按下它时,它不会进入以前的形式,它会最小化应用程序。 我已经尝试过 .res 文件中的常量,但没有找到相关选项。 (红色下划线按钮,在这张图片的左下方)

添加:所有表单都是使用新的 GUI 构建器创建的。

【问题讨论】:

    标签: java codenameone


    【解决方案1】:

    我也在努力使用 back 命令,这是它的工作原理(在我看来):

    假设您有 FormA 和 FormB。您从 FormA 启动 FormB,当您在 FormB 中按下返回按钮时,FormA 会显示回来。

    为此:在 FormA 中,声明此命令:

    Command back = new Command("Back") {
        @Override
        public void actionPerformed(ActionEvent evt) {
            showBack();
        }
    };
    

    仍在 FormA 中,在按钮的 actionEvent 中或启动 FormB 的其他东西中:

    public void onFormActionEvent(com.codename1.ui.events.ActionEvent ev) {
        Form formB = new FormB();
        formB.getToolbar().setBackCommand(back);
        formB.setBackCommand(back);
        formB.show();
    }
    

    它对我有用,这是我设法运行返回命令的唯一方法。

    【讨论】:

    • 我放入了我的application.java,到目前为止还没有工作。请注意,所有表单都是使用新的 GUI 构建器创建的。
    • Contact 是 FormB,这段代码在 Main (FormA) public void onContactActionEvent(com.codename1.ui.events.ActionEvent ev) { Form Contact = new Contact(); Contact.getToolbar().setBackCommand(back); Contact.setBackCommand(返回);新联系人().show(); }
    • 您的 Main 是第一个推出的课程?与init()start() ... ?如果是这样,它就不是一种形式。您必须在 start() 中启动您的 FormA,然后在 FormA 类中放入我编写的代码。
    • @Deveray .. 我打算试试你的方法,但我收到一条错误消息:方法 showBack() 未定义新 Command(){} 类型。知道为什么会这样吗?
    • @rainer 我有一段时间没有使用代号一了,所以我不记得一切了。方法showBack() Form的方法,所以调用的时候一定要在Form中。
    【解决方案2】:

    如果你使用类似的东西:

    myForm.getToolbar().setBackCommand("", e -> showPreviousForm());
    

    通过将箭头隐式放置在左上角并处理物理后退按钮,它可以正常工作。

    如果您只想要拥有它的设备上的物理后退按钮,您可以使用:

    myForm.setBackCommand(new Command("") {
        public void actionPerformed(ActionEvent ev) {
            showPreviousForm();
        }
    });
    

    请注意,我指的是硬按钮,因为它在应用中看起来与底部的屏幕后退按钮相同。

    【讨论】:

    • 在 Myapplication.java 中尝试过,并将“myform”更改为表单名称。显示错误。我应该为以前的表格创建一个新课程吗? public void init(Object context) { // 使用两个网络线程而不是一个 updateNetworkThreadCount(2);主题 = UIManager.initFirstTheme("/theme"); Toolbar.setGlobalToolbar(true); myForm.getToolbar().setBackCommand("", e -> showPreviousForm()); myForm.setBackCommand(new Command("") { public void actionPerformed(ActionEvent ev) { showPreviousForm();
    • 是否有用户创建的表单的工作示例,启用了硬件后退按钮?在演示中,只有在 myapplication.java 类中创建的表单。
    • 不,您需要将表单对象声明为 final 或在类中。请注意,您可以通过按下模拟所有皮肤上的物理后退按钮的退出按钮在模拟器中对其进行测试。您可以在调试器中放置一个断点,然后在您按回时查看代码是否已到达。
    • @ShaiAlmog 我收到以下错误消息:方法 showPreviousForm() is undefined for the type new Command(){}
    • 这是一个你需要写的方法,它会显示以前的形式。
    【解决方案3】:

    试试这个

    例如 这是你自己的按钮

     button.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View view) {
     onBackPressed(); 
    } });
    

    这个用于使用设备返回按钮

    @Override
    public void onBackPressed() {
        finish();
    }
    

    这是使用您自己的按钮

    button.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 finish();
             }
         });
    

    【讨论】:

    • 我希望在设备/硬件后退按钮上实现后退方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多