通过GestureListener中的actor / cells更新Table中的Label文本

时间:2014-11-08 23:52:14

标签: libgdx

也许我只是以错误的方式解决这个问题......

但是,我只想根据GestureListener.fling()的方向更改特定标签中的文字。我已经将Screen和GestureListener实现保留在同一个类中,以减少此问题可能存在的琐碎错误:

public class TestScreen implements Screen, InputProcessor, GestureDetector.GestureListener {

在show()方法中,我有以下内容:

Label heading = new Label("1ST", skin);
heading.setName("heading");
table.addActor(heading);

在fling()方法中,我有以下内容:

Label l = table.findActor("heading");
l.setText("2ND");

但是,该标签内的文字不会改变。我试图将以下行添加到fling()方法并返回成功,但文本仍然没有更新。

table.swapActors(table.getActor("heading"), l);

为了彻底,我尝试了以下无济于事:

SnapshotArray<Actor> children = table.getChildren();
int i = children.indexOf(l, false);
children.set(i, l);

这......

((Label)children.get(i)).setText(l.getText());

我甚至将最初的.addActor()更改为.add()以便创建/填充表格的单元格 - 然后尝试修改表格单元格中的值。 fling()方法......

Cell c = table.getCell(l);
c.setActor(l);

这也是......

Array<Cell> cells = table.getCells();
int i = cells.indexOf(c, true);
cells.get(i).setActor(l);

似乎没有任何东西在屏幕上直观地更新文本 - 但是,如果我单步执行调试器,那么表格的演员/单元格文本似乎会更新......但屏幕上显示的文字总是没有变化......我必须在这里找到一些东西......

1 个答案:

答案 0 :(得分:1)

尝试在标签上调用.invalidate() - 这会强制它更新为已更改的文字。

invalidate方法使这个actor的布局无效,导致layout()在下次调用validate()时发生。当actor中的状态发生变化需要布局但不改变actor的最小,首选,最大或实际大小时(这意味着它不会影响父actor的布局),应调用此方法。