Кодовое имя один: findById в UIFrament - PullRequest
1 голос
/ 06 мая 2019

Я делаю несколько тестов с 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?"));

Спасибо

1 Ответ

1 голос
/ 07 мая 2019

findById() находит только компоненты с атрибутом id. Это в первую очередь для доступа к контейнерам внутри иерархии фрагментов. Внедренные компоненты (например, $componentName) не обязательно имеют идентификаторы.

Например

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

cnt будет содержать контейнер потока.

В нотации JSON в настоящее время нет способа назначить идентификатор внедренному компоненту (например, $myFunLabel). В нотации XML вы можете назначить идентификатор, используя:

<$myFunLabel id="myFunLabel"/>

Это упущение в основном потому, что, поскольку компонент внедрен, у вас уже есть доступ к нему до внедрения. Это сгенерированные контейнеры в иерархии, к которым у вас не будет простого доступа, кроме как через findById().

...