当 Codename One 应用程序从后台转到前台时保留对话框
Keep a dialog when a Codename One app goes from background to foreground
默认情况下,代号一有这个代码:
public void start() {
if(current != null){
current.show();
return;
}
Form hi = new Form("Hi World", BoxLayout.y());
hi.add(new Label("Hi World"));
hi.show();
}
public void stop() {
current = getCurrentForm();
if(current instanceof Dialog) {
((Dialog)current).dispose();
current = getCurrentForm();
}
}
第一个问题:为什么当应用程序进入后台时默认情况下会处理对话框?
第二个问题:当应用程序从后台转到前台时,如何保持对话框显示?在我的应用程序中,这种默认处理会导致用户被迫在显示对话框的同一个按钮上点击两次,从而导致相同的 REST 请求被发送两次,从而产生不良影响。但是我有很多对话框并且检查自动处理的效果是有问题的,这就是为什么我问是否有可能完全避免这种自动处理(没有副作用)。
我们建议人们不要在 Dialog
中做任何比 "yes/no" 问题更详细的事情。默认情况下,对话框是模态的,因此当您在其上调用 show()
时,调用将被阻止。
这在生命周期方法中是有问题的,因为它们是按顺序执行的,因此会失败。您列出的解决方案是暂停应用程序时不要出现对话框,这是一个很好的方向。
如果您仍想在这种情况下显示对话框,您可以为该特定对话框做一个特殊情况,并在重新调用 start() 时使用一种无模式方法显示它。
默认情况下,代号一有这个代码:
public void start() {
if(current != null){
current.show();
return;
}
Form hi = new Form("Hi World", BoxLayout.y());
hi.add(new Label("Hi World"));
hi.show();
}
public void stop() {
current = getCurrentForm();
if(current instanceof Dialog) {
((Dialog)current).dispose();
current = getCurrentForm();
}
}
第一个问题:为什么当应用程序进入后台时默认情况下会处理对话框?
第二个问题:当应用程序从后台转到前台时,如何保持对话框显示?在我的应用程序中,这种默认处理会导致用户被迫在显示对话框的同一个按钮上点击两次,从而导致相同的 REST 请求被发送两次,从而产生不良影响。但是我有很多对话框并且检查自动处理的效果是有问题的,这就是为什么我问是否有可能完全避免这种自动处理(没有副作用)。
我们建议人们不要在 Dialog
中做任何比 "yes/no" 问题更详细的事情。默认情况下,对话框是模态的,因此当您在其上调用 show()
时,调用将被阻止。
这在生命周期方法中是有问题的,因为它们是按顺序执行的,因此会失败。您列出的解决方案是暂停应用程序时不要出现对话框,这是一个很好的方向。
如果您仍想在这种情况下显示对话框,您可以为该特定对话框做一个特殊情况,并在重新调用 start() 时使用一种无模式方法显示它。