我正在尝试使用libgdx List小部件来列出arraylist中的所有项目.好吧,实际上我的arraylist是一个对象列表,每个对象都包含一个字符串,即对象"name".
但是,当我尝试用List显示它们时,它会水平列出,而不是垂直列出.如果我试图显示正常数组的内容,它会垂直列出内容.我正在我的课程中实现Screen.
例如,
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);
Run Code Online (Sandbox Code Playgroud)
这表明:[火腿,哈格,火腿]
但是如果我创建一个String数组并且数组内容为{"ham","hag","ham"}
然后它显示
[火腿]
[魔女]
[火腿]
水平(没有换行符).
这是我列表的第一个问题.我的第二个问题是,当字符串值相同时,它会选择它们.在第二个例子中,如果我将默认选择设置为索引零,则将索引0 [ham]和索引2 [ham]都设置为选中状态.它将对每个与所选内容具有相同值的字符串执行此操作.我......不希望它这样做.我希望他们被视为独特的,因为他们是.
我正在尝试查看List的代码,但说实话,它超出了我的范畴.我不知道是什么原因引起了这些问题.我真的可以试着想出来,我可能会花费很长时间,但我想也许你们已经知道造成这种情况的原因了.或者也许可以给我一个很好的替代List.
谢谢!
关于第一个问题: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
Run Code Online (Sandbox Code Playgroud)
如果在运行时从文件加载字符串,匹配的字符串将是不同的实例.
归档时间: |
|
查看次数: |
676 次 |
最近记录: |