代号一回命令更新表单数据
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();
}
};
我有一个 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();
}
};