当 setData 为空数组时,Titanium appcelerator tableview 保持高度

Titanium appcelerator tableview keep height when setData with empty array

我有一个表格视图,其中包含如下数据:

var liste = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi','Dimanche'];
var days = [];

for (var i = 0; i < liste.length; i++) {
    days.push(Alloy.createController("common/_item_tableview", {
                text_filtre : liste[i],
                checked : true,
            }).getView());
}

$.my_tableview.setData(days); // or $.my_tableview.data = days;

使用这段代码,我得到了一个包含天数行的表格视图,现在我想单击一个按钮并删除所有表格视图行:

$.my_button.addEventListener('click', function(){
    $.my_tableview.setData([]);
})

所有的行都被删除了,但是tableview的高度仍然保持不变,请问您有什么想法吗?这是 setData([]) 之后的屏幕截图,当我想用​​另一个数据重新提供 tableview 时,在上面添加了一点 space。

Screenshot Tableview after setData([])

谢谢。

您最好添加 TableView 现在拥有的样式属性。您是否使用 Ti.UI.SIZE 作为 TableView 的 height 属性?如果没有,那么你应该这样做。如果这样做,那么在调用 setData 方法后 re-set 它可能是个好主意。

$.my_button.addEventListener('click', function(){
    $.my_tableview.setData([]);
    $.my_tableview.height = Ti.UI.SIZE;
});

现在,另一件事是让 TableView 的高度为 Ti.UI.FILL 以占据整个屏幕。当您需要清除数据时,您应该像这样使 TableView 不可见:

$.my_button.addEventListener('click', function(){
    $.my_tableview.visible = false;
});

然后,如果您需要再次填充它,您可以在设置新数据后使其可见。

var newData = []; // This represents the new TableViewRow array 
$.my_tableview.setData(newData);
$.my_tableview.visible = true;

查看您发布的屏幕截图,这不是保持高度的 tableview,而是空 tableview 的样子。

要删除这些分隔线,请为您的表格视图分配一个空的 footerView。

在 xml 文件中,在您的 tableView 中添加一个 FooterView 标签:

<TableView id = "my_tableview">
    <FooterView>
        <View height="0"/>
    </FooterView>
</TableView>