gpt4 book ai didi

java - 如何在圆圈中导航

转载 作者:行者123 更新时间:2023-12-02 00:45:22 25 4
gpt4 key购买 nike

标题可能不太具有描述性,但我想不出更好的标题。

问题如下:我有一个屏幕 (ScreenOne),带有指向另一个屏幕 (ScreenTwo) 的链接。ScreenTwo 上有一个返回 ScreenOne 的链接。

我通过自定义 RichTextFields 和自定义 ChangeListener 实现了此功能。

现在的问题是我不断收到 StackOverflowError!有没有办法以这种方式来回导航?

问候马特

public class MyApp extends UiApplication
{
public static void main(String[] args)
{
MyApp theApp = new MyApp();
theApp.enterEventDispatcher();
}

public MyApp()
{
ScreenOne so = ScreenProvider.getInstance().getScreenOne();
so.initialize();
ScreenProvider.getInstance().getScreenTwo().initialize();
pushScreen(so);
}
}

public class ScreenOne extends MainScreen {
MyTextField link;

public ScreenOne() {
link = new MyTextField("FirstScreen");
add(link);
}

public void initialize(){
link.setChangeListener((FieldChangeListener) new MyFieldChangeListener(ScreenProvider.getInstance().getScreenTwo()));
}
}

public class ScreenTwo extends MainScreen {
MyTextField link;

public ScreenTwo() {
link = new MyTextField("SecondScreen");
add(link);
}

public void initialize(){
link.setChangeListener((FieldChangeListener) new MyFieldChangeListener(ScreenProvider.getInstance().getScreenOne()));
}
}

public class MyFieldChangeListener implements FieldChangeListener {

private Screen nextScreen;

public MyFieldChangeListener(Screen nextScreen) {
this.nextScreen = nextScreen;
}

public void fieldChanged(Field field, int context) {
UiApplication.getUiApplication().pushScreen(nextScreen);
}
}

public class MyTextField extends RichTextField {
public MyTextField() {
super();
}

public MyTextField(String text) {
super(text);
}

protected boolean touchEvent(TouchEvent message) {
if (TouchEvent.CLICK == message.getEvent()) {
FieldChangeListener listener = getChangeListener();
if (null != listener)
listener.fieldChanged(this, 1);
}
return super.touchEvent(message);
}
}

public class ScreenProvider {
private static ScreenProvider instance = null;

private ScreenProvider(){}

public static ScreenProvider getInstance() {
if (instance == null) {
instance = new ScreenProvider();
}
return instance;
}

private ScreenOne screenOne = new ScreenOne();
private ScreenTwo screenTwo = new ScreenTwo();

public ScreenOne getScreenOne() {
return screenOne;
}

public ScreenTwo getScreenTwo() {
return screenTwo;
}
}

最佳答案

ScreenOne 的构造函数创建一个 ScreenTwo 实例,ScreenTwo 的构造函数创建一个 ScreenOne 实例。这里有一个无限循环。

关于java - 如何在圆圈中导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com