代号一回命令更新表单数据

Codename One back command update form data

我有一个 Android 应用程序,它使用返回命令返回到开始屏幕。

开始屏幕有一个标签,里面有一个数字,我想在使用后退命令时更新它。

我可以用 back 命令中的代码找到一个解决方案,但我不知道我的方法是否是最好的,因为 ClassOne 被加载了两次。

这是我已有的代码:

public class ClassOne {

    public ClassOne(ClassPojo classPojo) {

        // I want to change the text of this label when calling the back command
        labelOne.setText(classPojo.getStringTest());
        formOne.show();
    }

}

public class ClassTwo {
        
    public ClassTwo(Form a , ClassPojo classPojo) {     
        Command back = new Command("A") {
            @Override
            public void actionPerformed(ActionEvent evt) {

                // I am adding the new value for the label here inside the back command

                classPojo.setStringTest("testing");
                a.showBack(); 
                new ClassOne(classPojo);
            }
        };
        formTwo.setBackCommand(back);
    }

重新创建表单实例的开销可以忽略不计,因此这不是问题,但近年来我们尝试更多地重用表单实例。不是因为表演。

好处在于轻微的行为,例如表单内的滚动位置。这些很难复制。

我不确定是什么问题,你的例子有点笼统。但是,没有重新创建 startScreen 表单实例的完整最小示例是:

        Form startScreen = new Form("Start screen", BoxLayout.y());
        Wrapper<Integer> count = new Wrapper<>(1);
        Label numberLabel = new Label(count.get() + "");
        Button button1 = new Button("Go to Form 2");
        startScreen.addAll(numberLabel, button1);
        startScreen.show();

        button1.addActionListener(l -> {
            Form form2 = new Form("Form 2", BoxLayout.y());
            Label label = new Label("Use the back button");
            form2.add(label);
            form2.getToolbar().setBackCommand("Back", Toolbar.BackCommandPolicy.ALWAYS, ll -> {
                count.set(count.get() + 1);
                numberLabel.setText(count.get() + "");
                startScreen.showBack();
            });
            form2.show();
        });

如果您甚至不想重新创建 form2 实例,那么您可以这样做:

        Form startScreen = new Form("Start screen", BoxLayout.y());
        Wrapper<Integer> count = new Wrapper<>(1);
        Label numberLabel = new Label(count.get() + "");
        Button button1 = new Button("Go to Form 2");
        startScreen.addAll(numberLabel, button1);
        startScreen.show();

        Form form2 = new Form("Form 2", BoxLayout.y());
        Label label = new Label("Use the back button");
        form2.add(label);
        form2.getToolbar().setBackCommand("Back", Toolbar.BackCommandPolicy.ALWAYS, ll -> {
            count.set(count.get() + 1);
            numberLabel.setText(count.get() + "");
            startScreen.showBack();
        });

        button1.addActionListener(l -> {
            form2.show();
        });

在我看来,是否重新创建 Form 的实例应该根据具体情况进行评估。在考虑的变量中,根据我的谦虚意见,还有代码的可读性和它的作用,尤其是在复杂的情况下。

在测试过程中,我发现了一个简单的解决方案,就是将标签添加到构造函数中。我希望这段代码能有所帮助。

public ClassTwo(Form a, ClassPojo classPojo, Label label) { 

    Command back = new Command("A") {
        @Override
        public void actionPerformed(ActionEvent evt) {

        label.setText(classPojo.getStringTest());
        a.showBack(); 
     }
};