假设我要在列表视图的项目中使用以下布局:

<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结合使用的最佳方法是什么?

最佳答案

我喜欢这样做的方法是,使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());

07-26 08:38