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!!!”);}