如何从LibGDX列表中获取所选项目?

如何从LibGDX列表中获取所选项目?,libgdx,Libgdx,我尝试了几种不同的方法从列表中获取所选项目(请参见下面的代码),但我尝试的所有方法都只返回列表中的第一个项目,而不管实际选择了哪个项目。从视觉上看,它似乎可以工作,因为正确的项目在单击时会突出显示 作为我尝试做的概述,我有一个包含所有保存的预设文件(json文件)的文件夹,然后我将所有文件的名称读入一个字符串列表,从这个列表中可以选择一个特定的预设,然后我有一个单独的“加载”文本按钮,用于加载从列表中选择的项目。但如上所述,单击“加载”按钮时,不会从列表中加载正确的项目 这是我的密码: publ

我尝试了几种不同的方法从列表中获取所选项目(请参见下面的代码),但我尝试的所有方法都只返回列表中的第一个项目,而不管实际选择了哪个项目。从视觉上看,它似乎可以工作,因为正确的项目在单击时会突出显示

作为我尝试做的概述,我有一个包含所有保存的预设文件(json文件)的文件夹,然后我将所有文件的名称读入一个字符串列表,从这个列表中可以选择一个特定的预设,然后我有一个单独的“加载”文本按钮,用于加载从列表中选择的项目。但如上所述,单击“加载”按钮时,不会从列表中加载正确的项目

这是我的密码:

public class PresetLoadMenu extends Menu {
    private GUI gui;
    private SaveManager saveManager;

    private Table scrollPaneContainerTable;
    private ScrollPane scrollPane;
    private Table scrollTable;
    private List<String> presetList;
    private TextButton loadButton;

    private FileHandle rootFolderHandle = Gdx.files.external(“presets/”);   

    public PresetLoadMenu(GUI gui){
        this.gui = gui;
        refreshList();

        scrollTable = new Table();
        scrollTable.add(presetList);        
        scrollPane = new ScrollPane(scrollTable);

        scrollPaneContainerTable = new Table();
        scrollPaneContainerTable.add(scrollPane).size(this.getWidth(), this.getHeight()*.2f);
        add(scrollPaneContainerTable);

        row();

        loadButton = new TextButton("LOAD", gui.menuStyles.getMenuOkCancelButtonStyle());
        loadButton.addCaptureListener(new ChangeListener(){
            @Override
            public void changed(ChangeEvent event, Actor actor){
                // METHOD 1:
                // System.out.println("SELECTED PRESET: " + presetList.getSelected());

                // METHOD 2:
                // System.out.println("SELECTED PRESET: " + presetList.getSelection().getLastSelected());

                // METHOD 3:
                // for (int i=0; i<presetList.getSelection().size(); i++){
                //     System.out.println("INDEX: " + i + "  SELECTED PRESET: " + presetList.getSelection().toArray().get(i));
                // }
            }
        });
        add(loadButton).size(loadButton.getWidth(), loadButton.getHeight());        
    }

    public void refreshList(){
        FileHandle[] files = rootFolderHandle.list();
        Array<String> namesArray = new Array<String>();
        for(FileHandle file: files) {
            namesArray.add(file.name());
        }

        presetList = new List<String>(gui.menuStyles.getListStyle());
        presetList.setItems(namesArray);        
    }
}
公共类预置加载菜单扩展菜单{
私有GUI;
私人储蓄管理器;
私有表scrollPaneContainerTable;
私有滚动窗格;
私有表滚动表;
私人名单;
私有文本按钮加载按钮;
私有文件句柄rootFolderHandle=Gdx.files.external(“预设/”);
公共预设加载菜单(GUI){
this.gui=gui;
刷新列表();
scrollTable=新表();
添加(预设列表);
scrollPane=新的scrollPane(scrollTable);
scrollPaneContainerTable=新表();
scrollPaneContainerTable.add(scrollPane).size(this.getWidth()、this.getHeight()*.2f);
添加(scrollPaneContainerTable);
行();
loadButton=newtextbutton(“LOAD”,gui.menuStyles.getMenuOkCancelButtonStyle());
loadButton.addCaptureListener(新的ChangeListener(){
@凌驾
公共无效已更改(ChangeEvent事件、参与者){
//方法1:
//System.out.println(“所选预设:+presetList.getSelected());
//方法2:
//System.out.println(“所选预设:+presetList.getSelection().getLastSelected());
//方法3:

//对于(int i=0;i应要求,我复制我最后的评论作为答案,以便结束我的问题


这个问题实际上是我发布的类之外的其他问题,所以presetList.getSelected()现在我知道问题出在哪里了,可能还可以正常工作。但在我解决问题之前,我已经把列表换成了按钮组,这实际上比使用列表更好,所以它可以正常工作。列表有一个内置的侦听器,可以在触地时选择项目,因此在尝试上下滚动时项目会被选中。有了一个按钮,我就可以有一个只针对选中状态的侦听器,这正是我想要的。

根据您的回答,我通过创建一个TextButton(buttonTable)表来解决这个问题,每个按钮都用一个字符串初始化:

final TextButton button = new TextButton("my string",skin);
还有一位听众:

button.addListener(new ClickListener() {
    public void clicked (InputEvent event, float x, float y) {
        button.getText()));
    }
}); 
此按钮表初始化滚动窗格以允许垂直滚动:

scrollPane = new ScrollPane(buttonsTable);
此滚动窗格已添加到用于设置我的表单格式的表中:

mainTable.add(scrollPane);
这张桌子是演员添加到舞台上的:

stage.addActor(mainTable);

使用
presetList.getSelected()
有什么问题吗?问题实际上是我发布的类之外的其他东西,所以presetList.getSelected()是现在我知道问题出在哪里了,可能还可以正常工作。但在我解决问题之前,我已经把列表换成了按钮组,这实际上比使用列表更好,所以它可以正常工作。列表有一个内置的侦听器,可以在触地时选择项目,因此在尝试上下滚动时项目会被选中。只需一个按钮,我就可以为选中状态设置一个侦听器,这正是我想要的。谢谢。因此,请回答您的问题以关闭它:-)@Sebastian,done.:)