0

私は ListView を持っていますが、各 ListItem にセルを追加する必要があります。追加する必要があるセルの数がわかりません。これは可能ですか?

テンプレート内の ListItem にビューを追加できません。id と bindId が ListItem 要素の「行」に等しくなっています。

私が考えることができる他の唯一の解決策は、12個のセルを持ち、必要のないセルを非表示にすることです。

//widget.xml
<Alloy>
    <View id="widget">
        <ListView id="list" defaultItemTemplate="list">
            <Templates>
                <ItemTemplate name="list" bindId="row" id="row"/>
            </Templates>
            <ListSection/>
        </ListView>
    </View>
</Alloy>

各セルに追加する bindId の配列があります。

//cell.js
$.title.bindId = args.cell;

//cell.xml
<Alloy>
    <View id="cell">
        <Label id="title"/>
    </View>
</Alloy>

幅が 0 に設定された 12 個のセルがあり、使用している列の幅のみを設定しています。他の列は非表示のままです。これは私の実際のファイルです:

<ListView id="list" defaultItemTemplate="item">
    <Templates>
        <ItemTemplate name="item" class="item" id="item" bindId="item">
            <View id="row" bindId="row">
                <View class="cell" bindId="cell1" id="cell1">
                    <View class="border left"/>
                    <Label class="title" bindId="title1" id="title1"/>
                    <View class="border right"/>
                    <View class="line"/>
                </View>
                ....
                <View class="cell" bindId="cell12" id="cell12">
                    <View class="border left"/>
                    <Label class="title" bindId="title12" id="title12"/>
                    <View class="border right"/>
                    <View class="line"/>
                </View>
            </View>
        </ItemTemplate>
    </Templates>
    <ListSection/>
</ListView>

これは私のコントローラーの一部です:

data.items = [];

for(var i = 0; i < 100; i++) if(data.list[i]) {

    var row = {
        properties:{
            searchableText:''
        }
    };

    for(var c in args.columns) {

        row.properties.searchableText += data.list[i][args.columns[c].alias]+' ';

        row['cell'+parseInt(parseInt(c)+1)] = {
            width:data.width
        };

        row['title'+parseInt(parseInt(c)+1)] = {
            text:data.list[i][args.columns[c].alias]
        };
    }

    data.items.push(row);
};

$.list.sections[0].setItems(data.items);
4

1 に答える 1

1

あなたが探しているのは、iOS の UICollectionView または Android の GridLayout だと思います。これを Titanium で使用するには、Marcel のモジュールを使用できます。

https://github.com/mpociot/TiCollectionView

本当に ListView を使用する必要がある場合は、はい、思いついたことがほとんど唯一の方法だと思います。

于 2016-05-24T12:48:48.650 に答える