codenameone - 表单未在第二次调用时显示
问题描述
我为应用程序制作了一个简单的侧面菜单。首次调用菜单时。菜单显示正常。
当我第二次重新调用菜单时,我看到一个空白屏幕。
这就是我构建菜单的方式:
package com.mainsys.zappeion;
import static com.codename1.ui.CN.*;
import com.codename1.ui.Form;
import com.codename1.ui.Dialog;
import com.codename1.ui.plaf.UIManager;
import com.codename1.ui.util.Resources;
import com.codename1.io.Log;
import com.codename1.ui.Toolbar;
import com.codename1.ui.FontImage;
/**
* This file was generated by <a href="https://www.codenameone.com/">Codename One</a> for the purpose
* of building native mobile applications using Java.
*/
public class Zappeion {
private Form current;
private Resources theme;
public void init(Object context) {
// use two network threads instead of one
updateNetworkThreadCount(2);
theme = UIManager.initFirstTheme("/theme");
// Enable Toolbar on all Forms by default
Toolbar.setGlobalToolbar(true);
// Pro only feature
Log.bindCrashProtection(true);
addNetworkErrorListener(err -> {
// prevent the event from propagating
err.consume();
if(err.getError() != null) {
Log.e(err.getError());
}
Log.sendLogAsync();
Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
});
}
public void start() {
if(current != null){
current.show();
return;
}
Toolbar tb = new Toolbar();
Statues statues = new Statues();
statues.setToolbar(tb);
tb.addMaterialCommandToSideMenu("Αγάλματα", FontImage.MATERIAL_ALBUM, e -> {
statues.show();
});
Sights sights = new Sights();
sights.setToolbar(tb);
tb.addMaterialCommandToSideMenu("Αξιοθέατα", FontImage.MATERIAL_ALBUM, e -> {
sights.show();
});
Map map = new Map();
map.setToolbar(tb);
tb.addMaterialCommandToSideMenu("Χάρτης ", FontImage.MATERIAL_ALBUM, e -> {
map.show();
});
MainSys mns = new MainSys();
mns.setToolbar(tb);
SplashScreen sc = new SplashScreen(); //(sights, mns);
sc.setToolbar(tb);
sc.show();
}
public void stop() {
current = getCurrentForm();
if(current instanceof Dialog) {
((Dialog)current).dispose();
current = getCurrentForm();
}
}
public void destroy() {
}
}
在上面的代码上,例如,如果我单击菜单上的 Sights Form,它将显示 ok。如果然后我重新单击此菜单,我将得到一个没有菜单工具栏且什么都没有的空白屏幕。
任何帮助表示赞赏。
解决方案
它实际起作用的是下面的代码。我不知道它为什么会起作用,因为我看到的只是代码的重新排序。我改变的另一个想法是我下载了新闻皮肤(Galaxy S8、ipone 8 plus)并在它们上进行了测试。但在那之后它适用于我以前的皮肤(三星s7,iphone 6)。这很奇怪,我不知道是否有人看到更多东西。
package com.mainsys.zappeion;
import static com.codename1.ui.CN.*;
import com.codename1.ui.Form;
import com.codename1.ui.Dialog;
import com.codename1.ui.plaf.UIManager;
import com.codename1.ui.util.Resources;
import com.codename1.io.Log;
import com.codename1.ui.Toolbar;
import com.codename1.ui.FontImage;
/**
* This file was generated by <a href="https://www.codenameone.com/">Codename One</a> for the purpose
* of building native mobile applications using Java.
*/
public class Zappeion {
private Form current;
private Resources theme;
public void init(Object context) {
// use two network threads instead of one
updateNetworkThreadCount(2);
theme = UIManager.initFirstTheme("/theme");
// Enable Toolbar on all Forms by default
Toolbar.setGlobalToolbar(true);
// Pro only feature
Log.bindCrashProtection(true);
addNetworkErrorListener(err -> {
// prevent the event from propagating
err.consume();
if(err.getError() != null) {
Log.e(err.getError());
}
Log.sendLogAsync();
Dialog.show("Connection Error", "There was a networking error in the connection to " + err.getConnectionRequest().getUrl(), "OK", null);
});
}
public void start() {
if(current != null){
current.show();
return;
}
Statues statues = new Statues();
Sights sights = new Sights();
Map map = new Map();
MainSys mns = new MainSys();
SplashScreen sc = new SplashScreen(sights, mns);
BrowserForm browser = new BrowserForm();
Toolbar tb = statues.getToolbar();
tb.addMaterialCommandToSideMenu("Αρχική", FontImage.MATERIAL_ALBUM, e -> {
sc.setTitle("Αρχική");
sc.show();
});
tb.addMaterialCommandToSideMenu("Αγάλματα", FontImage.MATERIAL_ALBUM, e -> {
statues.setTitle("Αγάλματα");
statues.setUrl("https://www.zappeion.gr/el/statues");
statues.show();
});
tb.addMaterialCommandToSideMenu("Αξιοθέατα", FontImage.MATERIAL_ALBUM, e -> {
sights.show();
});
tb.addMaterialCommandToSideMenu("Χάρτης ", FontImage.MATERIAL_ALBUM, e -> {
map.show();
});
statues.setToolbar(tb);
sights.setToolbar(tb);
map.setToolbar(tb);
mns.setToolbar(tb);
sc.setToolbar(tb);
sc.show();
}
public void stop() {
current = getCurrentForm();
if(current instanceof Dialog) {
((Dialog)current).dispose();
current = getCurrentForm();
}
}
public void destroy() {
}
}
推荐阅读
- c++ - OpenCV WarpPerspective - 生成的单应性的强烈失真
- angular - Angular 8.0.1 platform.es5.js:102 Uncaught TypeError: Object(...) is not a function
- asp.net-mvc - 带有数据库数据的 DropDownList Viewbag
- javascript - MS 边缘滚动滞后
- ruby-on-rails - Rails 路线,意外结果(需要发布路线,而不是获取路线)
- c# - 单击“搜索”按钮时使用表格呈现 PartialView
- laravel - 如何在 vue-monthly-picker 中编写更改事件方法
- asp.net-core - 在 mvc 应用程序中,如何获取授权码?
- vba - 设置文本框默认值查询结果vba
- java - 如何在我自己的类中处理 null 以避免 NullPointerException