2015-08-21 92 views
2

我已經嘗試了幾種不同的方法從列表中獲取選定的項目(請參閱下面的代碼),但我試過的所有項目只返回列表中的第一個項目,而不管實際選擇了哪個項目。在視覺上它似乎工作,因爲正確的項目點擊時突出顯示。如何從LibGDX列表中獲取所選項目?

作爲我想要做的一般概述,我有一個包含所有保存的預設文件(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);   
    } 
} 

最後一個方法我用一個for循環只是爲了看它是否會打印出來,我點擊了其他項目試過了,但它仍然印的第一個項目只有一個時間,並沒有檢測到我點擊了其他任何項目。

+0

的,什麼是錯用'presetList.getSelected()'? – noone

+0

該問題實際上是我發佈的課程之外的其他內容,因此,現在我找出問題所在,presetList.getSelected()可能工作得很好。但在我弄明白之前,我已經將List換成了ButtonGroup,對我來說實際上比使用List更好,所以它成功了。該列表有一個內置的監聽器,用於在觸摸時選擇該項目,因此當試圖向上或向下滾動時,項目會被選中。有了一個按鈕,我可以爲偵聽狀態設置一個偵聽器,這正是我想要的。謝謝。 – Tekkerue

+0

所以請回答你的問題關閉它:-) – Sebastian

回答

0

根據要求我複製我的最後評論作爲答案,以關閉我的問題。

該問題實際上是我發佈的課程之外的其他內容,因此,現在我找出問題出在哪裏,presetList.getSelected()可能工作得很好。但在我弄明白之前,我已經將List換成了ButtonGroup,對我來說實際上比使用List更好,所以它成功了。該列表有一個內置的監聽器,用於在觸摸時選擇該項目,因此當試圖向上或向下滾動時,項目會被選中。有了一個按鈕,我可以爲偵聽狀態設置一個偵聽器,這正是我想要的。

0

根據您的回答,我解決它通過創建TEXT按鈕(buttonTable)的表,他們每個人的用字符串初始化:

final TextButton button = new TextButton("my string",skin); 

和聽衆:

button.addListener(new ClickListener() { 
    public void clicked (InputEvent event, float x, float y) { 
     button.getText())); 
    } 
}); 

這buttonTable初始化ScrollPane以允許垂直滾動:

scrollPane = new ScrollPane(buttonsTable); 

此scrollPane是adde d表用於格式化我的表格:

mainTable.add(scrollPane); 

該表是演員添加到舞臺:

stage.addActor(mainTable); 
相關問題