Apache Pivot и пользовательский ListView ItemRenderer - PullRequest
1 голос
/ 02 июля 2011

Скажите, что я хочу следующий макет в элементах моего списка:

<TablePane styles = "{padding : 5, horizontalSpacing : 5, verticalSpacing : 5}" >
    <columns>
        <TablePane.Column width = "1*"/>
        <TablePane.Column width = "21"/>
    </columns>

    <TablePane.Row height="-1">
        <TextInput bxml:id ="txtName" 
                   textSize="15" />
        <TablePane.Filler/>
    </TablePane.Row>

    <TablePane.Row height="-1">
        <TablePane.Filler/>
        <ActivityIndicator active="true" width="16" height="16"/>
    </TablePane.Row>
</TablePane>

И скажите, что у меня есть следующий пользовательский ItemRenderer:

public class CustomListRenderer extends TablePane
                                implements ListView.ItemRenderer {
    // stuff here
}

Как лучше всего использовать приведенный выше фрагмент BXML с моим пользовательским ListRenderer?

1 Ответ

0 голосов
/ 17 ноября 2011

Мне нравится делать так, чтобы CustomListRenderer был тем, что вы могли бы назвать «кодом позади» для файла bxml с аналогичным именем, и добавлял в него метод фабрики для создания самого себя, вызывая сериализатор bxml.Примерно так:

public class CustomListRenderer extends TablePane
                                implements ListView.ItemRenderer {
    public static CustomListRenderer create() throws IOException, SerializationException {
    BXMLSerializer bxmlSerializer = new BXMLSerializer();
    return (CustomListRenderer) bxmlSerializer.readObject(CustomListRenderer.class, "CustomListRenderer.bxml");
    }

    // rest of your stuff here
}

Затем поместите свой фрагмент выше в CustomListRenderer.bxml, но измените корневой элемент на CustomListRenderer:

<my:CustomListRenderer styles = "{padding : 5, horizontalSpacing : 5, verticalSpacing : 5}" 
  xmlns:bxml="http://pivot.apache.org/bxml"
  xmlns:my="your.java.package.here"
  xmlns="org.apache.pivot.wtk">
  ... rest of your bxml here ...

Наконец, при создании ListView, который хочетчтобы использовать свой пользовательский рендер, вы можете сделать

listview.setItemRenderer(CustomListRenderer.create());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...