libgdx List小部件有两个问题

时间:2015-02-16 02:03:11

标签: java libgdx

我正在尝试使用libgdx List小部件来列出arraylist中的所有项目。好吧,实际上我的arraylist是一个对象列表,每个对象都包含一个字符串作为对象" name"。

但是,当我尝试用List显示它们时,它会水平列出,而不是垂直列出。如果我试图显示正常数组的内容,它会垂直列出内容。我在课堂上实现了屏幕。

例如,

ArrayList<String> PartyListEntries = new ArrayList<>(); 

private List PartyList = new List(skin);

PartyListEntries.add("ham");
PartyListEntries.add("hag");
PartyListEntries.add("ham");
PartyList.setItems(PartyListEntries);

table.setFillParent(true);

table.top().left().padTop(10).padLeft(10);
table.add(PartyList);

stage.addActor(table);

这表明:[火腿,火腿,火腿]

但是如果我创建一个String数组并且数组内容为{&#34; ham&#34;,&#34; hag&#34;,&#34; ham&#34; }

然后显示

[火腿]

[HAG]

[火腿]

水平(没有换行符)。

这是我的第一个问题。我的第二个问题是,当字符串值相同时,它会选择它们。在第二个例子中,如果我将默认选择设置为索引零,则将索引0 [ham]和索引2 [ham]都设置为选中状态。它将对每个与所选内容具有相同值的字符串执行此操作。我......不希望它这样做。我希望他们被视为独特的,因为他们是。

我正在尝试查看List的代码,但说实话,它超越了我。我不知道导致这些问题的原因。我真的可以试着想出来,我可能会花费很长时间,但我想也许你们已经知道造成这种情况的原因了。或者也许可以为我提供一个很好的替代List。

谢谢!

1 个答案:

答案 0 :(得分:5)

关于第一个问题:Libgdx小部件只使用你给它的任何对象的toString方法来制作文本标签。这就是为什么你用list和String数组得到不同的结果。这只是编写每个类的人如何将数组格式化为String的偏好。如果要使用List类,可以将其子类化并将toString方法更改为您想要的方式,或者您可以创建一个List包装类,该类执行自己的将列表转换为String的方法。

关于第二个问题:这是Java的特点。如果您对字符串进行硬编码(将它们放在带引号的类中的实际代码中),则编译器会将所有匹配的字符串放入String类的单个共享实例中。所以“ham”和“ham”是String的相同实例,是同一个对象。

你可以通过使用像这样的String构造函数包装你的字符串来解决这个问题。 new String("ham")。这将强制它创建一个单独的String实例。

示例:

String s0 = "a";
String s1 = "a";
String s2 = new String("a");
boolean b0 = s0.equals(s1); //evaluates true
boolean b1 = s0.equals(s2); //evaluates true
boolean b2 = s0==s1; //evaluates true
boolean b3 = s0==s2; //evaluates false

如果在运行时从文件加载字符串,匹配的字符串将是不同的实例。