Android 将TextInputListener字符串输入到标签中
我看了一下,我想要的是将输入的文本从其中一个对话框中提取到一个标签中。我用这种方法得到了空指针:Android 将TextInputListener字符串输入到标签中,android,libgdx,label,Android,Libgdx,Label,我看了一下,我想要的是将输入的文本从其中一个对话框中提取到一个标签中。我用这种方法得到了空指针: public class TextInputListener implements Input.TextInputListener { public String name, year; @Override public void input(String text) { name = "Enter some text.."+ text ; } @Override public void
public class TextInputListener implements Input.TextInputListener {
public String name, year;
@Override
public void input(String text) {
name = "Enter some text.."+ text ;
}
@Override
public void canceled() {
name = "canceled by user";
}
}
然后我有一个按钮打开对话框:
btnEdit.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
TextInputListener listener = new TextInputListener();
Gdx.input.getTextInput(listener, "Enter information", "Name:");
}
});
然后我尝试将该字符串输入到我的标签中:
Label nameLabel = new Label(listener.name, labelstyle);
正如我所说,我在最后一行得到了null指针,它说“尝试从null对象引用上的字段'TextInputListener.name'读取”。但我要确保键入一些文本,然后按enter/ok 您从未在TextInput侦听器中设置名称字符串
Gdx.input.getTextInput(listener, "Enter information", "Name:");
我认为这不是使用输入设置字符串,也不是调用新标签(listener.name,labelstyle)代码>在用户实际键入输入之前
尝试将TextInputListener更改为
public class TextInputListener implements Input.TextInputListener {
public String name = "Enter some text..";
public String year;
@Override
public void input(String text) {
name = "Enter some text.."+ text ;
}
@Override
public void canceled() {
name = "canceled by user";
}
如果不起作用,请尝试检查用户是否输入了文本,然后调用Label-namelab=new-Label(listener.name,labelstyle)代码>我认为有两个问题
首先,当您使用字符串对象创建标签时,当字符串值更改时,标签不会自动更改。至少我没有让它工作。因此,您必须手动调用setText(stringstr)
方法。但要执行此操作,您需要访问Label对象
第二个是,您使用listener.name
创建标签,但是您正在changed(changeent事件,Actor-Actor)
方法中创建侦听器对象,因此如果您不在该方法中创建标签,则侦听器将为空
因此,对于代码,必须设置如下内容:
public class TextInputListener implements Input.TextInputListener {
private Label label;
public TextInputListener(Label targetLabel) {
label = targetLabel;
}
@Override
public void input(String text) {
label.setText("Enter some text.."+ text);
}
@Override
public void canceled() {
label.setText("canceled by user");
}
}
在GUI创建方法中的某个地方:
private TextInputListener listener; // Class field
...
Label nameLabel = new Label("", labelstyle);
listener = new TextInputListener(nameLabel);
btnEdit.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
Gdx.input.getTextInput(listener, "Enter information", "Name:", ""); // My Gdx version needed a third parameter
}
});
...
陛下也不管用。不过我注意到,现在的错误是“尝试读取空对象引用上的字段xxxx”,感谢您的解释。虽然在对话框中键入一些文本后,当我按Ok时,标签不会改变文本。我想我需要以某种方式更新屏幕?或者重新进入还是怎么的?因为按enter键时,更改不会发生在我眼前。请看一下这个,看看我是否做错了什么地方?你能提供一些相关的代码,我可以检查一下。也许你或我错过了什么。Oh-ke以为你会用一个舞台来展示GUI的东西。您是否使用多个屏幕?你看到启动后的“只是一些东西”了吗。这真的就是您正在执行的代码吗?似乎缺少了一些东西。我在StoScreen中将标签添加到舞台,并在render中绘制/表演它。是的,我使用多个屏幕。此外,我将“just something”删除为just empty“如果您有一个Stage,为什么要在屏幕上使用labelName.draw(game.batch,1)手动渲染标签代码>如果将标签添加到阶段。下面是一个代码示例,也许可以澄清一些问题。但是我也建议如果项目稍微大一点,使用JSON文件的皮肤