Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将TextInputListener字符串输入到标签中_Android_Libgdx_Label - Fatal编程技术网

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文件的皮肤