Codenameone 代码名一:UIFramentFindById

Codenameone 代码名一:UIFramentFindById,codenameone,Codenameone,我正在用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(myU

我正在用
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()

之外,您无法轻松访问层次结构中生成的容器。是parseJSON行失败了吗?你能把它分解成几个部分,指向返回null的那一行吗?
findById
返回null。这可以通过以下方法进行测试:
if(myUI.findById(“myfunlab”)==null){Log.p(“错误:findById返回null!!!”);}