代号一:UIFrament 中的 findById

Codename One: findById in UIFrament

我正在用 UIFragment 做一些测试。你能告诉我为什么下面的代码是错误的吗?它给了我一个 NullPointerException.

Form hi = new Form("Hi World", BoxLayout.y());
UIFragment myUI = UIFragment.parseJSON("{flow: $myFunLabel, align: center}")
        .set("myFunLabel", new Label("Hi World"));
hi.add(myUI.getView());
myUI.findById("myFunLabel").putClientProperty("WhatIsThis?", "This is my fun Label!!!");
hi.show();
Log.p((String) myUI.findById("myFunLabel").getClientProperty("WhatIsThis?"));

谢谢

findById() 仅查找具有 id 属性的组件。这主要用于访问片段层次结构中的容器。注入的组件(例如 $componentName)不一定有 ID。

例如

UIFragment myUI = UIFragment.parseJSON("{flow: $myFunLabel, id:myFlow align: center}")
        .set("myFunLabel", new Label("Hi World"));
Container cnt = myUI.findById('myFlow');

cnt 将包含流容器。

在 JSON 表示法中,目前没有办法为注入的组件分配 ID(例如 $myFunLabel)。在 XML 表示法中,您可以使用以下方式分配 ID:

<$myFunLabel id="myFunLabel"/>

这个遗漏主要是因为,由于注入了组件,所以在注入之前您已经可以访问它。除了通过 findById().

之外,您无法轻松访问层次结构中生成的容器